О чём лекция

Как сравнивать алгоритмы, если один и тот же код на разных компьютерах работает от сотых долей секунды до минут. Время измеряется в тактах, а важен не точный счёт, а то, как он растёт с длиной входа. Для этого вводятся оценки O, Ω и Θ — язык, на котором дальше в курсе будет описан любой алгоритм. В конце — три версии проверки числа на простоту и их оценки.

Маршрут

  1. Что измеряем → Время работы алгоритма
  2. Как описываем рост → Асимптотические оценки
  3. Сколько стоит цикл → Циклы

1. Алгоритмы и структуры данных

Структуры данных нужны, чтобы хранить информацию.

Что оптимизируем в алгоритме:

  • время работы (time) — обозначается T;
  • память (memory) — обозначается M.

На полях рядом перечислены ещё «улучшить визуал», «многопоточность», «безопасность» — без пояснений. По-видимому, это другие стороны оптимизации; на лекции дальше разбирались только время и память.

2. Время работы

Один и тот же алгоритм выполняет тактов. Запустим его на трёх компьютерах:

КомпьютерСкоростьВремя работы
мой тактов/с10 с
бабушкин тактов/с100 с
МФТИ тактов/с0,01 с

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

Модель, в которой так считают, — RAM-модель. Такт — простейшее действие:

  • сравнение;
  • присвоение;
  • создание переменной.

Подробнее — Время работы алгоритма.

3. Память

N — длина входа   ──вход──▶  [ Алгоритм ]  ──выход──▶
                               компьютер
                           memory: доп. память

N — длина входа. Кроме памяти под вход и выход алгоритму может понадобиться дополнительная память — её и оценивают.

4. Зависимость тактов от длины входа

На графике по горизонтали — длина входа N (отмечены 10 и 100), по вертикали — такты, то есть время.

  • Экспериментальный график — ломаная по замерам: растёт, но с колебаниями, местами даже проседает.
  • «Моё предположение — тенденция» — плавная кривая, проведённая сквозь замеры.

Интересна именно тенденция: как растёт число тактов при росте N. Её и описывают оценки.

5. Оценки: O, Ω, Θ

Пусть — число тактов (наши данные), — функция, с которой сравниваем.

O — «О-большое»

— «наши данные оценены сверху функцией ».

На графике: до точки N кривая может подниматься выше , а после N всегда остаётся под ней.

Ω — «омега»

Зеркально: после точки N кривая всегда выше — оценка снизу.

Θ — «тета»

После точки N кривая зажата между и — оценка с обеих сторон.

Подробнее — Асимптотические оценки.

6. Асимптотика

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

ОценкаНазвание
константа:
логарифм
корневая
линейная
…

На лекции сказали, что основание логарифма может быть любым.

Не из лекции: почему основание не важно

Логарифмы по разным основаниям отличаются только постоянным множителем:

Например, при любом N. А постоянный множитель в O-оценке поглощается константой из определения: если , то . Поэтому , и — одна и та же оценка, и основание не пишут.

Таблица сравнения

, компьютер делает тактов в секунду:

Время работыТактовСекунд
1

секунд — больше трёх лет. Разница между линейным и квадратичным алгоритмом на таком входе — секунда против нескольких лет.

Не из лекции: откуда 18

18 — это натуральный логарифм: . Двоичный дал бы . На вывод таблицы это не влияет: в обоих случаях это десятки тактов против .

7. Упрощение оценок

Пример 1. .

Если , то . Обозначим — получили , то есть . Постоянный множитель уходит в константу.

Пример 2. .

Из получаем с .

Не из лекции: почему это верно

При выполнено , значит и . Достаточно было бы ; из лекции тоже подходит, просто с запасом. Младшее слагаемое поглощается старшим.

8. Проверка числа на простоту

простое, если у него 2 делителя — и 1.

Запись — « делится на ».

Вариант а — перебрать все делители

counter = 0
for i = 1 ... p
    если p ⋮ i
        counter += 1
если counter = 2
    число простое
иначе
    не простое

Подсчёт тактов:

  • counter = 0 — 1 такт;
  • тело цикла — не больше 2 тактов, и выполняется оно N раз;
  • проверка counter = 2 в конце — 2 такта.

Как считается стоимость цикла — Циклы.

Вариант б — до первого делителя

counter = 0
for i = 2 ... p-1
    если p ⋮ i
        counter += 1
        break
если counter = 0
    число простое
иначе
    не простое

Проверяем только «лишние» делители — от 2 до — и останавливаемся на первом найденном. .

Не из лекции: почему break не улучшил оценку

Если простое, делителя в диапазоне нет, break не срабатывает, и цикл проходит все итерации. Оценка O описывает рост сверху, поэтому определяет её именно такой, самый долгий случай.

Вариант в — до корня

counter = 0
for i = 2 ... ⌈√N + 1⌉
    если p ⋮ i
        counter += 1
        break
если counter = 0
    число простое
иначе
    не простое

.

Не из лекции: почему хватает корня

Если и оба множителя больше , то — противоречие. Значит, у составного числа есть делитель не больше , и дальше искать незачем.

Обозначения в этом разделе

В разделе 3 N — длина входа. Здесь считается по самому числу : цикл варианта «а» делает итераций. В варианте «в» граница записана как — по смыслу это . Конспект повторяет запись лекции.

Не из лекции: число 1

Для в вариантах «б» и «в» цикл не выполняется ни разу, counter остаётся 0, и ответ — «простое». По определению выше у 1 один делитель, и она не простая. Вариант «а» отвечает верно: counter = 1. Чтобы «б» и «в» были правильными, 1 нужно проверять отдельно.

Грабли

  • Сравнивать алгоритмы в секундах. Тот же алгоритм на другом компьютере работает в 10 раз дольше или в 1000 раз быстрее. Сравнивают такты и их рост.
  • Путать O, Ω и Θ. O — оценка сверху, Ω — снизу, Θ — с обеих сторон сразу.
  • Выписывать константы и основания. , и пишутся как , и .
  • Верить, что break всегда ускоряет. В худшем случае он не срабатывает, и оценка остаётся прежней.
  • Забыть про в проверке на простоту.

После этой лекции должно получаться

  • объяснить, почему время работы меряют в тактах, а не в секундах;
  • записать определения O, Ω и Θ и нарисовать к каждому картинку;
  • упорядочить , , , , , , по скорости роста;
  • прикинуть по таблице, уложится ли алгоритм в секунду при ;
  • посчитать такты простого цикла и свести результат к O-оценке;
  • объяснить, почему проверка на простоту до правильна и почему она быстрее.