Грубо говоря, временная сложность - это способ суммировать, как количество операций или время выполнения алгоритма увеличивается с увеличением размера ввода.
Как и большинство вещей в жизни, коктейльная вечеринка может помочь нам понять.
НА)
Когда вы прибываете на вечеринку, вы должны пожать руку каждому (выполнить операцию на каждом предмете). По мере того, как количество участников N
увеличивается, время / работа, которую вам потребуется, чтобы пожать руку каждому, увеличивается O(N)
.
Почему O(N)
и нет cN
?
Существует разное количество времени, которое требуется, чтобы пожать руку людям. Вы могли бы усреднить это и зафиксировать это в константе c
. Но основная операция здесь - рукопожатие со всеми - всегда будет пропорциональна O(N)
, независимо от того, что c
было. При обсуждении вопроса о том, стоит ли нам идти на коктейльную вечеринку, мы часто больше заинтересованы в том, чтобы нам приходилось встречаться со всеми, чем в мельчайших подробностях того, как эти встречи выглядят.
O (N ^ 2)
Ведущий коктейльной вечеринки хочет, чтобы вы играли в глупую игру, где все встречаются со всеми остальными. Поэтому вы должны встретиться с N-1
другими людьми и, поскольку следующий человек уже встретил вас, они должны встретиться с N-2
людьми и так далее. Сумма этой серии есть x^2/2+x/2
. По мере того, как количество посетителей растет, x^2
срок быстро растет , поэтому мы просто отбрасываем все остальное.
O (N ^ 3)
Вы должны встретиться со всеми остальными, и во время каждой встречи вы должны говорить обо всех остальных в комнате.
O (1)
Хозяин хочет что-то объявить. Они звонят в бокал и говорят громко. Все слышат их. Оказывается, неважно, сколько посетителей, эта операция всегда занимает одинаковое количество времени.
O (журнал N)
Хозяин выложил всех за стол в алфавитном порядке. Где дэн? Вы полагаете, что он должен быть где-то между Адамом и Мэнди (конечно, не между Мэнди и Заком!). Учитывая это, он между Джорджем и Мэнди? Нет. Он должен быть между Адамом и Фредом и между Синди и Фредом. И так далее ... мы можем эффективно определить местонахождение Дэна, посмотрев на половину набора, а затем половину этого набора. В конечном счете, мы смотрим на O (log_2 N) лиц.
O (N log N)
Вы можете найти, где сесть за стол, используя алгоритм выше. Если большое количество людей пришло к столу, по одному, и все сделали это, это заняло бы O (N log N) времени. Оказывается, это время, необходимое для сортировки любой коллекции элементов, когда они должны сравниваться.
Лучший / худший случай
Вы прибываете на вечеринку и должны найти Иниго - сколько времени это займет? Это зависит от того, когда вы приедете. Если вокруг толпятся все, вы столкнулись с наихудшим вариантом: это займет O(N)
время. Однако, если все сядут за стол, это займет всего лишь O(log N)
время. Или, может быть, вы можете использовать силу крика бокала хозяина, и это займет всего лишь O(1)
время.
Предполагая, что хост недоступен, мы можем сказать, что алгоритм поиска Inigo имеет нижнюю границу O(log N)
и верхнюю границу O(N)
, в зависимости от состояния партии, когда вы приедете.
Космос и связь
Те же идеи могут быть применены для понимания того, как алгоритмы используют пространство или связь.
Кнут написал хорошую статью о первом под названием «Сложность песен» .
Теорема 2: Существуют произвольно длинные песни сложности O (1).
ДОКАЗАТЕЛЬСТВО: (из-за Кейси и Саншайн Бэнд). Рассмотрим песни Sk, определенные в (15), но с
V_k = 'That's the way,' U 'I like it, ' U
U = 'uh huh,' 'uh huh'
для всех к.