Вкрай кажучи, часова складність - це спосіб узагальнити те, як кількість операцій або час виконання алгоритму зростає зі збільшенням розміру вводу.
Як і більшість речей у житті, коктейль може допомогти нам зрозуміти.
O (N)
Коли ви приїдете на вечірку, вам потрібно потиснути руку всім (зробити операцію над кожним предметом). Зі збільшенням кількості відвідувачів 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 журналу N)
Ви можете знайти, де сісти за стіл, використовуючи алгоритм, наведений вище. Якби велика кількість людей приходила до столу, по одному, і все це робило, це займе час O (N log N) . Виявляється, як довго потрібно сортувати будь-яку колекцію предметів, коли їх потрібно порівнювати.
Найкращий / гірший випадок
Ви приїжджаєте на вечірку і вам потрібно знайти Ініго - скільки часу це займе? Це залежить від того, коли ви приїдете. Якщо всі розмолоті, ви потрапили в найгірший випадок: це займе O(N)
час. Однак якщо всі сідають за стіл, це займе лише O(log N)
час. Або, можливо, ви можете скористатися потужністю кричущого хазяїна, і це займе лише O(1)
час.
Припускаючи, що хост недоступний, можна сказати, що алгоритм пошуку Inigo має нижню O(log N)
і верхню межу O(N)
, залежно від стану учасника, коли ви приїдете.
Простір та спілкування
Ті ж ідеї можна застосувати для розуміння того, як алгоритми використовують простір або комунікацію.
Кнут написав приємний документ про колишню назву "Складність пісень" .
Теорема 2: Існують довільно довгі пісні складності O (1).
ДОКАЗАННЯ: (завдяки Кейсі та Sunshine Band). Розглянемо пісні Sk, визначені (15), але з
V_k = 'That's the way,' U 'I like it, ' U
U = 'uh huh,' 'uh huh'
для всіх k.