Нотація великого O - це одиничне вільне середнє значення для вимірювання зміни продуктивності, таким чином, не спричиняє відносних витрат на обчислювальні примітиви.
Коротше кажучи:
позначення Big O - це вільний одиничний розмір, відносний тип вимірювання (на відміну від абсолютного вимірювання). Він може вимірювати лише різницю продуктивності, а не абсолютну продуктивність, для якої константи мають велике значення. Перевага полягає в тому, що це робить його значною мірою незалежним від реалізації, дозволяючи простішим аналізом, який може ігнорувати відносні витрати на елементарні операції, якщо ці витрати мають позитивні фіксовану верхню та нижню межі. Але наслідок цього - постійні фактори безглузді . Тим не менш, навіть за призначенням, аналіз асимптотичної складності може бути поставлений під сумнів з інших причин , і до нього слід ставитися уважно. Наприклад, необмежений розмір введення може бути не правильним параметром, який слід враховувати.
Перше зауваження - це те, що ваше запитання не зовсім точно вказане. Якщо ви нехтуєте постійною в 3 n , то дійсно є "зміна в три рази", але обидві змінюються з однаковою швидкістю, і ви не можете стверджувати, що "[одна] річ змінюється в 3 рази швидше, ніж інша".33n
Хорошим приводом ігнорувати константи в нотації Ландау є те, що у нас немає одиниці, на яку можна покластися. Коли хтось заявляє, що A живе вдвічі більше від вас, ніж B, це має значення незалежно від будь-якої одиниці. Ми можемо погодитися з цим, навіть якщо ти вимірюєш відстані в дюймах, поки я це роблю у світлові роки. Але для вимірювання абсолютної відстані потрібно вказати одиниці, і його числове формулювання залежить від обраної одиниці.
Фактичний час, взятий алгоритмом, залежить від часу виконання елементарних операцій, що дуже залежить від машини. Ви можете порахувати кількість елементарних операцій, але немає підстав вважати, що всі вони займають один і той же час, і завжди можна об'єднати кілька операцій в одну, або навпаки розкласти операцію на більш дрібні, так що число операцій насправді не має сенсу, якщо ви не погоджуєтесь на довідкову віртуальну машину. Бути незалежною від посилання - це перевага.
Інший погляд на перевагу підходу полягає в тому, що все, що вам важливо в аналізі, - це підрахунок кількості елементарних операцій, якщо їх вартість має верхню і позитивну нижню межу. Вам не доведеться турбуватися про індивідуальні витрати.
Однак ціна, яку потрібно заплатити за цю перевагу, полягає в тому, що оцінка обчислювальної вартості проводиться з не визначеною одиницею, а час обчислень, наприклад, може бути наносекундами або тисячоліттями - ми навіть не намагаємося знати. Іншими словами, постійні фактори безглузді, оскільки зміна одиниць невіддільна від зміни константного коефіцієнта , і ніякі еталонні одиниці не використовуються.
Як зазначив Patrick87 , цього достатньо, щоб зрозуміти, як алгоритм масштабується щодо розміру вводу, але він не дасть абсолютної міри продуктивності, окрім посилання на опорний блок. Видалення загальної опорної абстрактної машини можна зробити, коли дійсно хочеться порівняти продуктивність різних алгоритмів, але важче переконатися, що порівняння не упереджене деталями реалізації. У асимптотичній складності цього ризику уникають, оскільки ти порівнюєш алгоритм із самим собою.
У будь-якому випадку, лише наївний програміст покладається виключно на асимптотичну складність вибору алгоритму. Існує багато інших критеріїв, включаючи незгадану постійну та фактичну вартість елементарних операцій. Крім того, найгірша складність може бути поганим показником, оскільки джерело найгіршого випадку складності може траплятися рідко, а на фрагментах вхідних даних досить малий, що має обмежений вплив. Наприклад, загальні аналізатори для прилягаючих до граматики дерев мають теоретичну складність , і цілком корисні на практиці. Найгірший випадок, про який я знаю, - це
висновок поліморфного типу Дамаса-Хіндлі-МілнераO(n6)алгоритм, використовуваний для ML, який має експоненціальну найгіршу складність. Але це, схоже, не турбує користувачів ML, або перешкоджає написанню дуже великих програм в ML. Має значення більше, ніж константа. Власне, асимптотичний аналіз пов'язує міру витрат на обчислення з деякою мірою складності вхідних даних. Але розмір сировини може бути не правильним заходом.
Складність схожа на рішучість, вона може бути теоретично поганою, але це може бути неактуально для більшості простору даних ... іноді. Аналіз складності асимптотики - це хороший і добре розроблений інструмент, з його перевагами та обмеженнями, як і всі інструменти. З або без вираження константи, яка може бути безглуздою, необхідно використовувати судження.