Карта / Big-O / Что такое O(n)

Что такое O(n)

Big-O — способ описать, как растёт время работы алгоритма, когда данных становится больше. Не точное время в секундах (это зависит от железа), а порядок роста.

// O(n) — линейный: время растёт прямо пропорционально размеру данных
for (int x : array) {
    System.out.println(x);
}

// O(1) — константный: время не зависит от размера данных
int first = array[0];

Если массив вырос в 10 раз, O(n)-алгоритм будет работать примерно в 10 раз дольше, а O(1) — как и раньше, мгновенно.

размер данных → O(1) O(n) O(n²)
Копнуть глубже

Главные классы сложности, от лучшего к худшему:

ОбозначениеНазваниеПример
O(1)константаmap.get(key), array[i]
O(log n)логарифмбинарный поиск
O(n)линейнаяперебор массива
O(n log n)линеаризмхорошая сортировка (Collections.sort)
O(n²)квадратичнаявложенный цикл по тому же массиву

Big-O — это про худший случай и про большие n. Для маленьких данных разница между O(n) и O(n²) незаметна, но на миллионах записей O(n²)-алгоритм может работать часами там, где O(n log n) справится за секунды.

🎤 Закрыл тему, если можешь объяснить:
• что показывает Big-O и почему это не секунды, а порядок роста;
• назвать порядок основных классов сложности от лучшего к худшему (если дошёл до 2-го слоя).