ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡ вопросов ❓ Π½Π° собСсСдовании Π² C# 🍧

ΠžΠ±Π·ΠΎΡ€ вопросов ΠΏΠΎ языка ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ C# ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ NET


Project maintained by Dvurechensky-Docs Hosted on GitHub Pages — Theme by mattgraham

πŸ“Š Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ алгоритмичСская ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΊΠ°ΠΊ Π΅Ρ‘ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒ?

Typing SVG

Static Badge

✨ ОглавлСниС

⬆ Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ Π³Π»Π°Π²Π½ΠΎΠΉ

🧠 Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ алгоритмичСская ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ (Π½Π° ΠΏΠ°Π»ΡŒΡ†Π°Ρ…)

АлгоритмичСская (асимптотичСская) ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ β€” это способ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ растёт ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ рСсурсов (врСмя, ΠΏΠ°ΠΌΡΡ‚ΡŒ, I/O ΠΈ Ρ‚.Π΄.) Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ ΠΏΡ€ΠΈ ростС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π²Ρ…ΠΎΠ΄Π° n. ΠœΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ интСрСсуСмся ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… n β€” ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚Π΅Ρ€ΠΌΡ‹ Π΄ΠΎΠΌΠΈΠ½ΠΈΡ€ΡƒΡŽΡ‚ ΠΈ ΠΊΠ°ΠΊ быстро растёт функция Π·Π°Ρ‚Ρ€Π°Ρ‚.

ОсновноС Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:


πŸ“ Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ (ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ)


✍️ Как ΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ β€” пошаговая ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ°

  1. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ ΠΌΠ΅Ρ€Ρƒ Π²Ρ…ΠΎΠ΄Π° n Π§Ρ‚ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ? ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ элСмСнтов Π² массивС, число Π²Π΅Ρ€ΡˆΠΈΠ½ Π² Π³Ρ€Π°Ρ„Π΅, Π΄Π»ΠΈΠ½Π° строки ΠΈ Ρ‚.Π΄.

  2. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΡƒ ВрСмя (ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ) β€” Ρ‡Π°Ρ‰Π΅ всСго. МоТно ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ элСмСнтарныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (сравнСниС, присваиваниС, Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠ°).

  3. Π‘Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠŸΡ€ΠΈΠΊΠΈΠ½ΡŒΡ‚Π΅, сколько Ρ€Π°Π· выполняСтся «дорогая» опСрация Π² зависимости ΠΎΡ‚ n.

  4. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Π»ΡƒΡ‡ΡˆΠΈΠ΅/срСдниС/Ρ…ΡƒΠ΄ΡˆΠΈΠ΅ случаи

    • best-case (ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ), average-case (оТидаСмая ΠΏΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ), worst-case (максимум) β€” ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΌΡ‹ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅ΠΌ worst-case.
    • amortized β€” срСдняя ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ (Π²Π°ΠΆΠ½ΠΎ для структур Ρ‚ΠΈΠΏΠ° динамичСского массива, union-find).
  5. УпроститС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π£Π±Π΅Ρ€ΠΈΡ‚Π΅ константы ΠΈ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ Ρ‡Π»Π΅Π½Ρ‹: 3n^2 + 10n + 100 -> Θ(n^2).

  6. Если рСкурсия β€” Π²Ρ‹Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ€Π΅ΠΊΡƒΡ€Ρ€Π΅Π½Ρ‚Ρƒ Π Π΅ΡˆΠΈΡ‚Π΅ Π΅Ρ‘ (ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹: подстановка, Π΄Π΅Ρ€Π΅Π²ΠΎ рСкурсии, Master theorem, characteristic equation).

  7. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΊΡ€Π°ΠΉΠ½ΠΈΠ΅ случаи ΠΈ скрытыС стоимости НапримСр, вычислСниС GetHashCode() для строк β€” O(k) Π³Π΄Π΅ k Π΄Π»ΠΈΠ½Π° строки; сравнСниС строк O(k) Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС ΠΈ Ρ‚.Π΄.


πŸ”’ ΠŸΡ€Π°Π²ΠΈΠ»Π° упрощСния (эмпиричСскиС)


πŸ” Π’ΠΈΠ΄Ρ‹ ΠΎΡ†Π΅Π½ΠΎΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (ΠΊΠΎΠ³Π΄Π° Ρ‡Ρ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ)


🧾 ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° (с шагами)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1 β€” Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ»

for (int i = 0; i < n; i++)
  for (int j = 0; j < n; j++)
    O(1);

Анализ: i ΠΎΡ‚ 0 Π΄ΠΎ n-1 (n ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ), j β€” n ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ β†’ всСго nΒ·n = nΒ² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ β†’ O(n^2).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2 β€” гСомСтричСский шаг

for (int i = 1; i < n; i *= 2)
  O(1);

i ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ значСния 1,2,4,8,… Π΄ΠΎ n β†’ количСство ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ β‰ˆ log2 n β†’ O(log n).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3 β€” consecutive loops

for i in 1..n { O(1) }
for j in 1..n { O(1) }

Анализ: O(n) + O(n) = O(2n) β†’ O(n).


🧩 Master Theorem β€” ΠΊΡ€Π°Ρ‚ΠΊΠΎ (ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для рСкурсий)

Для Ρ€Π΅ΠΊΡƒΡ€Ρ€Π΅Π½Ρ‚Ρ‹ Π²ΠΈΠ΄Π° T(n) = a T(n/b) + f(n) (a β‰₯1, b>1):

  1. Если f(n) = O(n^{d - Ξ΅}) для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ξ΅>0 β†’ T(n) = Θ(n^d) (Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ Π΄ΠΎΠΌΠΈΠ½ΠΈΡ€ΡƒΠ΅Ρ‚).
  2. Если f(n) = Θ(n^d * log^k n) β†’ T(n) = Θ(n^d * log^{k+1} n) (равновСсиС).
  3. Если f(n) = Ξ©(n^{d + Ξ΅}) ΠΈ a f(n/b) ≀ c f(n) для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ c<1 (regularity) β†’ T(n) = Θ(f(n)) (функция свСрху Π΄ΠΎΠΌΠΈΠ½ΠΈΡ€ΡƒΠ΅Ρ‚).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹


⚑ Amortized Π°Π½Π°Π»ΠΈΠ· β€” ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: динамичСский массив (capacity doubling) β€” append amortized O(1), Π½ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ O(n).


🧨 ΠšΠ°Π²Π΅Ρ€Π·Π½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ / Π»ΠΎΠ²ΡƒΡˆΠΊΠΈ (Ρ‡Ρ‚ΠΎ часто ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚)

  1. Amortized vs average vs worst β€” List<T>.Add() amortized O(1), Π½ΠΎ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ O(n). Hash table Insert β€” amortized O(1), worst O(n) ΠΏΡ€ΠΈ рСсайзС ΠΈΠ»ΠΈ Π°Ρ‚Π°ΠΊΠ΅ коллизиями.

  2. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ Β«O(1)Β» β€” Π½Π΅ всСгда быстрая β€” O(1) ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ дорогостоящСй константой (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, систСмный Π²Ρ‹Π·ΠΎΠ²).

  3. БравнСния строк/Ρ…ΡΡˆΠ΅ΠΉ β€” Dictionary<string, ...>: вставка/поиск Π°ΠΌΠΎΡ€Ρ‚. O(1), Π½ΠΎ GetHashCode ΠΈ сравнСниС строк β€” O(k) (Π΄Π»ΠΈΠ½Π° строки). Π₯Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ «волшСбно O(1)Β» для Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ.

  4. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ generic/boxing β€” List<object> ΠΈ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ int ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ boxing ΠΈ O(1) становится Π΄ΠΎΡ€ΠΎΠΆΠ΅ (Π°Π»Π»ΠΎΡ†ΠΈΡ€ΡƒΠ΅Ρ‚). List<int> β€” Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π±ΠΎΠΊcΠΈΠ½Π³ΠΎΠ².

  5. ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹, generic классы Π½Π΅Ρ‚ β€” string[] ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ object[] β€” опасно ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ArrayTypeMismatchException. List<string> нСльзя ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ List<object>.

  6. БмСшиваниС слоТностСй β€” Π΄Π²Π° подряд Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»Π° for i..n for j..i β†’ O(n^2) (сумма 1..n ~ n(n+1)/2).

  7. РСкурсия Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ β€” Наивная рСкурсия fib(n) β†’ ΡΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ O(Ο†^n). Π‘ ΠΌΠ΅ΠΌΠΎΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ β†’ O(n).

  8. Big O vs practical performance β€” Алгоритм O(n) с большой константой ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ…ΡƒΠΆΠ΅, Ρ‡Π΅ΠΌ O(n log n) для ΠΌΠ°Π»Ρ‹Ρ… n. ВсСгда ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ константы ΠΈ кэш.

  9. LOH, ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… β€” Π‘ΠΎΠ»ΡŒΡˆΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (строки >85kB, большиС массивы) ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² LOH ΠΈ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° сборку мусора.

  10. Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… β€” ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π° структурах Π²Π½ΡƒΡ‚Ρ€ΠΈ структуры Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π² List<List<T>> β€” Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ поиск Π² внСшнСм спискС, Ρ‚Π°ΠΊ ΠΈ Π² Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ.


πŸ“š Π’Π°Π±Π»ΠΈΡ†Π°: Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ слоТности (быстрый справочник)


🧭 БлоТности популярных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈ структур (часто ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚)


🧾 Как Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Ρ€Π΅ΠΊΡƒΡ€Ρ€Π΅Π½Ρ‚Ρƒ β€” Ρ‚Ρ€ΠΈ способа

  1. ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ°/индукция β€” ΠΏΡ€ΠΈΠΊΠΈΠ½ΡƒΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ ΠΈ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ.
  2. Π”Π΅Ρ€Π΅Π²ΠΎ рСкурсии β€” Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π½ΠΈ ΠΈ ΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ взносы.
  3. Master theorem β€” для aT(n/b) + f(n) (см. Π²Ρ‹ΡˆΠ΅).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: T(n) = 3T(n/4) + n β†’ d = log_4 3 β‰ˆ 0.792. f(n)=n = n^{1} -> f grows faster -> third case -> T(n)=Θ(n).


πŸ§ͺ ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ измСрСния ΠΈ ΠΊΠΎΠ³Π΄Π° асимптика ΠΎΠ±ΠΌΠ°Π½Ρ‡ΠΈΠ²Π°


🧨 ΠšΠ°Π²Π΅Ρ€Π·Π½Ρ‹Π΅ (ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽΠ΅Ρ€ΡΠΊΠΈΠ΅) вопросы + ΠΊΡ€Π°Ρ‚ΠΊΠΈΠ΅ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹

  1. Β«Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ O(1)?Β» β€” ВрСмя Π½Π΅ зависит ΠΎΡ‚ n (константноС), Π½ΠΎ константа ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ большой.

  2. «Как ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚ΡŒ O(n) ΠΎΡ‚ O(n log n) Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅?Β» β€” Для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… n O(n log n) растёт быстрСС; смодСлируйтС/ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅; для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… n константы Π²Π°ΠΆΠ½Π΅Π΅.

  3. Β«ΠŸΠΎΡ‡Π΅ΠΌΡƒ HashMap β€” O(1), Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° O(n)?Β» β€” Амортизированно O(1), Π½ΠΎ Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС ΠΈΠ·-Π·Π° ΠΏΠ»ΠΎΡ…ΠΈΡ… Ρ…Π΅ΡˆΠ΅ΠΉ/ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ/Π°Ρ‚Π°ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅Π³Ρ€Π°Π΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎ O(n).

  4. «МоТно Π»ΠΈ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ сортировку Π½ΠΈΠΆΠ΅ n log n?Β» β€” Для сортировки Π½Π° сравнСниях β€” Π½Π΅Ρ‚ (lower bound Ξ©(n log n)). Для ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… случаСв (Ρ†Π΅Π»Ρ‹Π΅ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ k) β€” counting/radix sort Π΄Π°ΡŽΡ‚ O(n + k).

  5. «Бколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π·Π°ΠΉΠΌΡ‘Ρ‚ Π²Ρ‹Π·ΠΎΠ² Equals для строки?Β» β€” Π’ Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ β€” O(k) (Π΄Π»ΠΈΠ½Π° строки), Π½ΠΎ часто быстроС сравнСниС ссылок ΠΏΡ€ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°Ρ….

  6. Β«ΠŸΠΎΡ‡Π΅ΠΌΡƒ Ρƒ quicksort срСдний O(n log n), Π° worst O(n^2)?Β» β€” ΠŸΡ€ΠΈ ΠΏΠ»ΠΎΡ…ΠΎΠΌ Π²Ρ‹Π±ΠΎΡ€Π΅ ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ элСмСнта (pivot) Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΡ€Π°ΠΉΠ½Π΅ нСсбалансированным. Рандомизация/Π²Ρ‹Π±ΠΎΡ€ ΠΌΠ΅Π΄ΠΈΠ°Π½Ρ‹ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚.

  7. Β«Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ amortized O(1)?Β» β€” БрСдняя ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ; ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΡ€ΠΎΠ³ΠΈΠΌΠΈ.

  8. Β«Π”Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° с ΡΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΒ» β€” Наивный Fibonacci O(Ο†^n) β†’ с ΠΌΠ΅ΠΌΠΎΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ/DP O(n).

  9. Β«ΠŸΠΎΡ‡Π΅ΠΌΡƒ массивы быстрСС LinkedList Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, хотя асимптотика вставки O(1) Ρƒ LinkedList?Β» β€” Кэш-Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: массивы ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ Π² памяти, мСньшС ΠΏΡ€ΠΎΠΌΠ°Ρ…ΠΎΠ² кэша β†’ быстрСС Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅.

  10. Β«Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ lower bound Ω(n log n) для сравнСния сортировок?Β» β€” Π›ΡŽΠ±Π°Ρ сортировка, основанная Π½Π° сравнСниях, Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ порядка n log n сравнСний Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ/срСднСм случаС (информационная ниТняя Π³Ρ€Π°Π½ΠΈΡ†Π°).


βœ… ΠšΠΎΡ€ΠΎΡ‚ΠΊΠ°Ρ ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ° (Ρ‡Ρ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Π½Π° собСсe β€” 1–2 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹)


🧰 ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΈΡ‘ΠΌΡ‹ для ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ (чСклист)


⬆ Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ Π³Π»Π°Π²Π½ΠΎΠΉ

✨Dvurechensky✨