Сложность алгоритма и O-нотация - Вопросы

Всего: 5 вопросов

1. 

Что такое сложность алгоритма и O-нотация (O-большое)?

Сложность алгоритма — это оценка того, как растут затраты алгоритма (время выполнения или объём памяти) при увеличении размера входных данных n. O-нотация (O-большое, Big O) описывает асимптотическое поведение: запись O(f(n)) означает, что число операций растёт не быстрее, чем функция f(n), с точностью до постоянного множителя. Она показывает не точное время, а порядок роста, что позволяет сравнивать алгоритмы независимо от компьютера, языка и компилятора. Например, O(n) — линейный рост (удвоили данные — удвоилось время), O(n^2) — квадратичный (удвоили данные — время выросло вчетверо).

2. 

Перечислите основные классы сложности от самого быстрого к самому медленному с примерами.

От самого быстрого к самому медленному:

  • O(1) — константная: время не зависит от размера данных (доступ к элементу массива по индексу).
  • O(log n) — логарифмическая: растёт очень медленно (бинарный поиск).
  • O(n) — линейная: пропорциональна данным (один проход по массиву).
  • O(n log n) — квазилинейная: эффективные сортировки (merge sort, Arrays.sort).
  • O(n^2) — квадратичная: вложенные циклы, пузырьковая сортировка.
  • O(2^n) — экспоненциальная: полный перебор, наивные числа Фибоначчи.
3. 

Какие правила применяют, чтобы привести выражение к нотации O-большого?

Основные правила:

  • Константы-множители отбрасываются: 8n^4 = O(n^4), (n^2)/5 = O(n^2).
  • Учитывается только самый быстрорастущий член: n^2 + n = O(n^2), 2^n + n^9 = O(2^n).
  • Основание логарифма не указывают — логарифмы с разными основаниями отличаются лишь на постоянный множитель, поэтому пишут просто O(log n).
  • Последовательные блоки складываются, вложенные — перемножаются: два цикла подряд дают O(n) + O(n) = O(n), а цикл внутри цикла — O(n) × O(n) = O(n^2).
4. 

Чем временная сложность отличается от пространственной?

Временная сложность (time complexity) оценивает, как растёт число операций, то есть время выполнения. Пространственная сложность (space complexity) — как растёт объём дополнительной памяти, которую алгоритм использует помимо самих входных данных. Эти оценки не обязаны совпадать: алгоритм может работать за O(n) по времени, но требовать лишь O(1) дополнительной памяти (обходит массив, храня только счётчик). Часто между временем и памятью приходится искать компромисс: ускорение за счёт кэширования результатов увеличивает расход памяти.

5. 

Чем различаются худший, средний и лучший случай сложности алгоритма?

Один и тот же алгоритм может отработать по-разному в зависимости от входных данных, поэтому различают три оценки:

  • Худший случай — верхняя граница, обозначается O-большим; её обычно и приводят, потому что она гарантирует, что медленнее не будет.
  • Средний случай — типичное поведение на случайных данных (Θ, «тета-большое»).
  • Лучший случай — нижняя граница (Ω, «омега-большое»).

Пример: линейный поиск в лучшем случае находит элемент сразу — O(1), а в худшем проходит весь массив — O(n). Когда говорят «сложность линейного поиска — O(n)», имеют в виду именно худший случай.

Страница 1 из 1