arrow_backНазад к полевым заметкам
OFFENSIVE Опубликовано 29 Jul 2026

Big O Notation: What A-Level CS Actually Expects

Практический разбор нотации Big O для компьютерных наук A-level, с решёнными примерами и советами по экзаменационным вопросам.

Big O notation встречается в каждой основной спецификации A-level по компьютерным наукам (AQA, OCR, Edexcel), и это сбивает с толку множество учащихся — не потому что математика сложная, а потому что они никогда не видят её связи с реальным кодом. Это практическое руководство по тому, что нужно знать и как ответить на экзаменационные вопросы без лишних слов.

Что Big O на самом деле измеряет

Big O описывает, как время выполнения (или объём используемой памяти) алгоритма растёт с увеличением размера входных данных, обычно обозначаемого n. Это не секундомер, который считает секунды. Это способ описать скорость роста, чтобы сравнивать алгоритмы независимо от оборудования.

Когда вы пишете O(n), вы говорите: если я удвою входные данные, объём работы примерно удвоится. O(n²) означает, что удвоение входных данных примерно учетверяет объём работы. Именно эту зависимость экзаменаторы хотят, чтобы вы выявили, а не точные подсчёты операций.

Сложности, которые нужно знать назубок

Для A-level это те, которые появляются снова и снова:

  • O(1) – константное время. Обращение к элементу массива по индексу: arr[5]. Размер массива не имеет значения.
  • O(log n) – логарифмическое. Бинарный поиск в отсортированном списке. Каждый шаг сокращает пространство поиска вдвое.
  • O(n) – линейное. Один проход по списку в цикле, как линейный поиск, проверяющий каждый элемент один раз.
  • O(n log n) – линеарифметическое. Merge sort и quicksort (средний случай) находятся здесь.
  • O(n²) – квадратичное. Вложенные циклы по одним и тем же данным, что делают bubble sort, insertion sort и selection sort.
  • O(2ⁿ) – экспоненциальное. Наивная рекурсивная последовательность Фибоначчи без мемоизации. Быстро становится плохо.

Вы должны уметь посмотреть на псевдокод и назвать нужную сложность с одного взгляда, потому что именно это в основном проверяется.

Чтение кода для определения сложности

Метод, который работает всегда: считайте циклы и посмотрите, как они связаны с n.

# O(n) - один цикл, один проход
for i in range(n):
    print(i)

# O(n^2) - вложенный цикл, оба зависят от n
for i in range(n):
    for j in range(n):
        print(i, j)

# O(log n) - пространство поиска сокращается вдвое на каждой итерации
low, high = 0, n - 1
while low <= high:
    mid = (low + high) // 2
    if target == arr[mid]:
        break
    elif target < arr[mid]:
        high = mid - 1
    else:
        low = mid + 1

Вложенный цикл, диапазон которого зависит от n, остаётся O(n²), даже если выглядит немного иначе (например, for j in range(i) вместо for j in range(n) — это всё ещё квадратично в целом, просто с другим множителем).

Обращайте внимание на циклы, которые вообще не зависят от n. Цикл, который выполняется 10 раз независимо от размера входных данных — это O(1), даже если цикл есть. Экзаменаторы любят так подтасовывать.

Распространённые алгоритмы сортировки и их Big O

Это любимая тема экзаменов, потому что она совмещает две спецификации: алгоритмы сортировки и сложность.

АлгоритмЛучший случайХудший случай
Bubble sortO(n)O(n²)
Insertion sortO(n)O(n²)
Merge sortO(n log n)O(n log n)
Binary searchO(1)O(log n)
Linear searchO(1)O(n)

Последовательность merge sort (одна и та же сложность в лучшем и худшем случае) стоит упомянуть явно, если вопрос спрашивает, почему вы выбрали бы его вместо bubble sort для больших наборов данных. Лучший случай bubble sort O(n) работает только с оптимизацией раннего выхода, когда в проходе не происходит обменов — упомяните эту деталь, если вы это упомянули, так как некоторые экзаменационные комиссии это ожидают.

Где ученики теряют баллы

Самое частое: написание

Написано с помощью ИИ, проверено и опубликовано Михалом Пильхом (CISSP), Korra Studio.

Готовы пойти дальше?

Это одна заметка из базы знаний Korra Studio — платформа сочетает каждую тему с наставничеством один на один.

Начать бесплатноarrow_forward