Все статьи и конспекты
Big OАнализ сложностиАлгоритмыФундаментальное
2 мин чтение

Асимптотический анализ и нотация Big O: Полное руководство

Фундаментальное руководство по оценке временной и пространственной сложности алгоритмов. От математических определений O, Ω, Θ, o, ω до иерархии классов сложности, амортизированного анализа, кеш-памяти процессора и практических правил олимпиадного программирования.

Введение: Почему секунды обманчивы?

Физическое время работы программы в миллисекундах зависит от архитектуры процессора, языка реализации, компилятора и загруженности ОС. Чтобы сравнивать алгоритмы независимо от «железа», в Computer Science используют асимптотический анализ и нотацию Big O.

Big O описывает не точное время работы в секундах, а закон, по которому растёт число базовых операций программы при увеличении размера входных данных NN к бесконечности (N→∞N \to \infty).

Формальные математические обозначения: O, Ω\Omega, Θ\Theta, o, ω\omega

1. Нотация Big O (Верхняя оценка / Worst-Case Bound)

f(n)=O(g(n))f(n) = O(g(n))
Формально: существуют положительные константы c>0c > 0 и n0≥1n_0 \ge 1, такие что для всех n≥n0n \ge n_0:
0≤f(n)≤c⋅g(n)0 \le f(n) \le c \cdot g(n)

Предельное определение: lim sup⁡n→∞f(n)g(n)<∞\limsup_{n \to \infty} \frac{f(n)}{g(n)} < \infty.

2. Нотация Big Ω\Omega (Нижняя оценка / Best-Case Bound)

f(n)=Ω(g(n))f(n) = \Omega(g(n))
Формально: существуют константы c>0c > 0 и n0≥1n_0 \ge 1, такие что:
f(n)≥c⋅g(n)(n≥n0)f(n) \ge c \cdot g(n) \quad (n \ge n_0)

3. Нотация Big Θ\Theta (Точная оценка / Tight Bound)

f(n)=Θ(g(n))f(n) = \Theta(g(n))
Формально: существуют константы c1,c2>0c_1, c_2 > 0 и n0≥1n_0 \ge 1, такие что:
c1⋅g(n)≤f(n)≤c2⋅g(n)(n≥n0)c_1 \cdot g(n) \le f(n) \le c_2 \cdot g(n) \quad (n \ge n_0)

4. Строгие оценки: Малое oo и Малое ω\omega

  • f(n)=o(g(n))  ⟺  lim⁡n→∞f(n)g(n)=0f(n) = o(g(n)) \iff \lim_{n \to \infty} \frac{f(n)}{g(n)} = 0 (ff растёт строго медленнее gg).
  • f(n)=ω(g(n))  ⟺  lim⁡n→∞f(n)g(n)=∞f(n) = \omega(g(n)) \iff \lim_{n \to \infty} \frac{f(n)}{g(n)} = \infty (ff растёт строго быстрее gg).

  • Иерархия классов сложности

    Класс сложностиНазваниеПример алгоритмаОценка при 29
    30КонстантноеДоступ по индексу в массиве31 операция
    32ЛогарифмическоеБинарный поиск33 операций
    34ЛинейноеЛинейный поиск, поиск максимума35 операций (36 с)
    37Линейно-логарифмическоеMergeSort, QuickSort, HeapSort38 операций (39 с)
    40КвадратичноеBubbleSort, вложенные циклы41 операций (часы)
    42ЭкспоненциальноеПеребор всех подмножествНе завершится за время жизни Вселенной

    График асимптотической сложности Big O

    Сравнение скорости роста функций времени $T(N)$ при увеличении размера данных $N$

    Что дальше?

    Закрепите материал задачей: Повторить число.

    Изучено — к практике →

    Отметка сохранится в этом браузере. Её можно отменить или снять кнопкой «Изучено».