Алгоритмы и сложность
19.11.2024
Программы с разными оценками сложности алгоритмов
В этом конспекте рассмотрены 5 программ с различной сложностью алгоритмов: O(1), O(log n), O(n), O(n²), и O(2ⁿ). Каждая программа снабжена пояснениями и примечаниями, чтобы лучше понять, как оценивается сложность.
1. Постоянная сложность O(1)
Пример задачи: Проверить, является ли число чётным.
Объяснение
Алгоритм выполняет одну и ту же операцию независимо от входных данных.
Время выполнения: всегда фиксированное. Пример: деление числа и проверка остатка.
2. Логарифмическая сложность O(log n)
Пример задачи: Бинарный поиск в отсортированном массиве.
Объяснение
Количество операций уменьшается в 2 раза на каждой итерации.
Сценарий: массив из
n
элементов. Заk
шаговn
становится 1. Формула:2^k = n → k = log₂n
.
3. Линейная сложность O(n)
Пример задачи: Найти сумму элементов массива.
Объяснение
Алгоритм посещает каждый элемент массива.
Сложность растёт линейно с размером входных данных
n
.
4. Квадратичная сложность O(n²)
Пример задачи: Найти все пары чисел с заданной суммой.
Объяснение
Два вложенных цикла означают, что для каждого элемента мы проверяем все остальные.
Сложность: пропорциональна
n × n = n²
.
5. Экспоненциальная сложность O(2ⁿ)
Пример задачи: Генерация всех подмножеств массива (рекурсия).
Объяснение
Рекурсия создаёт дерево вызовов, в котором каждый элемент либо включается, либо исключается. Пример: для
n=3
будет 2³ = 8 подмножеств.Сложность: удваивается с каждым новым элементом
n
.
Итоги
O(1)
Проверка чётности
Постоянное время, одна операция.
O(log n)
Бинарный поиск
Делим задачу пополам на каждом шаге.
O(n)
Сумма массива
Линейный проход по данным.
O(n²)
Пары с суммой
Два вложенных цикла.
O(2ⁿ)
Все подмножества
Рекурсия, экспоненциальный рост вызовов.
Last updated