Что такое нотация Big-O и зачем она нужна?
Суть
Big-O описывает, как растёт время работы (или память) алгоритма при росте размера входа n. Константы и младшие члены отбрасываются: O(2n + 10) — это O(n). По умолчанию говорят о худшем случае; для Array.append и хеш-таблиц важно уточнять «амортизированно» и «в среднем».
Классы по возрастанию:
- O(1) — доступ по индексу,
Dictionarylookup в среднем. - O(log n) — бинарный поиск, сбалансированное дерево.
- O(n) — линейный проход,
containsу массива. - O(n log n) — хорошие сортировки,
sort()в Swift. - O(n²) — вложенные циклы по одной коллекции.
- O(2ⁿ) — наивная рекурсия (Фибоначчи), полный перебор подмножеств.
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep