Що таке Big і O у позначенні Big O? Я прочитав визначення, і це не говорить про те, що O вимовляється як "о". Наприклад - я розумію, що O (n) - це складність лінійного алгоритму, де n може бути числом операцій. але що таке О ?
Що таке Big і O у позначенні Big O? Я прочитав визначення, і це не говорить про те, що O вимовляється як "о". Наприклад - я розумію, що O (n) - це складність лінійного алгоритму, де n може бути числом операцій. але що таке О ?
Відповіді:
Ну, я здогадуюсь, був би порядок, який збігається з вікіпедією .
Редагувати: (мій власний (будь-які покращення)) переклад зі статті німецької вікіпедії
Велика літера O (насправді велика омікрона на той час) як символ для порядку (німецька: "Ordnung von") вперше була використана німецьким теоретиком чисел Полом Бахманом у другому випуску своєї книги з теорії аналітичних чисел в 1894 р. Позначення набуло популярності завдяки праці Едмунда Ландау, іншого німецького теоретика чисел, з яким ця номенклатура широко пов'язана з сьогодні, особливо в німецькій термінології.
"Великий" означає "капітал", а "О" означає порядок, як і "порядок складності". Так названо через умову написання "порядку складності" як O (f (x)), наприклад, з великої літери "O" або "Big O". Ніхто не говорить про це багато, тому що "всі" розуміють, що це означає, і розуміння цього насправді не допомагає зрозуміти аналіз складності.
Для розуміння аналізу складності, я думаю, що посилання, розміщене topgun_ivard, є хорошим місцем для початку. Хороший вступний підручник, що охоплює структури даних або алгоритми, також може допомогти.
O стоїть на порядку.
Спочатку він був введений німецьким математиком Полом Бахманом у другому томі його книг з теорії чисел Die Analytische Zahlentheorie , опублікованому в 1894 р. (С. 401) . Він зазначає, після формули, де він вперше використовує позначення:
(...) wenn wir durch das Zeichen O (n) einde Grösse ausdrücken, deren Ordnung in Bezug auf n die Ordnung von n nicht überschreitet (...)
Мій переклад:
(...) де з позначенням O (n) ми вказуємо величину, порядок з якою n не перевищує порядку n (...)
На відміну від сказаного іншими, ніщо в його тексті не свідчить про те, що це насправді грецька столиця омікрон. Він використовує безліч грецьких та латинських символів, так що насправді немає способу сказати. Зважаючи на його постійне використання "Ordnung n log n " тощо у тексті, зрозуміло, що воно означає "Ordnung" (німецьке за "замовлення", якщо були сумніви) у будь-якому випадку, але це все ще може залишити відкритим використання вигадливий грек О.
Однак походження омікрона є скоріше ретронімом завдяки Дональду Кнуту, який представив символи омега (Ω) і тета (Θ) для споріднених понять у своїй роботі « Великий Омікрон» та «Велика Омега» та «Велика Тета» , або, можливо, Харді та Літлвуд, які ввели символ омеги раніше.
Мені подобається ця стаття , сподіваючись, що ви також знайдете її корисною!
Цитуючи розділ із статті:
Великі грецькі листи
Big O часто зловживають. Big O або Big Oh насправді короткий для Big Omicron. Він являє верхню межу асимптотичної складності. Отже, якщо алгоритмом є O (n log n), існує константа c така, що верхня межа - cn log n.
Θ (n log n) (Big Theta) більш щільно пов'язаний із цим. Такий алгоритм означає, що існує дві константи c1 і c2 такі, що c1n log n <f (n) <c2n log n.
Ω (n log n) (Big Omega) говорить про те, що алгоритм має нижню межу cn log n.
Є й інші, але вони є найпоширенішими, і Big O - найпоширеніший з усіх. Таке розмежування є, як правило, неважливим, але його варто зазначити. Правильне позначення - це правильне позначення, зрештою.
Що таке Big O?
Позначення Big O прагне описати відносну складність алгоритму шляхом зменшення швидкості росту до ключових факторів, коли ключовий фактор має тенденцію до нескінченності. З цієї причини ви часто почуєте фразу асимптотичної складності. При цьому всі інші фактори ігноруються. Це відносне подання складності.
Що не є великим?
Big O не є тестом на ефективність алгоритму. Це також умовне або абстрактне, оскільки воно прагне ігнорувати інші фактори. Складність алгоритму сортування зазвичай зводиться до кількості елементів, відсортованих як ключових факторів. Це добре, але він не враховує таких питань, як:
Використання пам'яті: один алгоритм може використовувати набагато більше пам'яті, ніж інший. Залежно від ситуації це може бути що-небудь від абсолютно нерелевантного до критичного; Вартість порівняння: Можливо, порівняння елементів дійсно дороге, що потенційно може змінити будь-яке порівняння в реальному світі між алгоритмами; Вартість переміщення елементів: копіювання елементів зазвичай дешеве, але це не обов'язково; тощо.
"f (x) є великим-о g (x)"
Це математичний спосіб передбачити зростання функцій.
Нехай f і g - функції від безлічі цілих чисел чи безлічі чи дійсних чисел до множини дійсних чисел. Ми говоримо, що f (x) - O (g (x)), якщо є константи C і k такі, що | f (x) | <= C | g (x) | де x> k.
Ви б прочитали це як "f (x) є великим-о g (x)"
Великий-O іноді називають символом Ландау після німецького математика Едмунда Ландау. Я не думаю, що це означає щось поза цим. Ви також маєте подібні позначення big-Omega та big-Theta. Символи такі ж довільні, як завжди, використовуючи тету для позначення кутів у ваших трикутниках у вашому середньому класі Планарної геометрії.
Виправлення @ back2dos дало задовільне пояснення для О як відношення до порядку. Чудова робота. Дивіться його відповідь.
Дональд Кнут застосував це для вивчення складності комп'ютерних програм.
Якщо ви хочете знайти причину використання позначення, слід прочитати
"Analytische Zahlentheorie" Пола Бахмана з 1892 року
EDIT: Виявляється, я помиляюся. Тим не менш, можливо, це допомагає комусь зберігати свої символи прямо, тому я не збираюся їх видаляти.
Власне, це не латинська літера О , це грецька літера Омікрон . На жаль, ці два має точно такий же символ, тому, з плином часу, оригінальна версія зіпсувалася, і тепер це просто Ох .
Вибір символу насправді не має особливого значення, він був обраний як мнемонічний пристрій:
Це воно. У цьому немає ніякого реального значення, це лише гра на слова, якщо ви хочете, щоб допомогти вам легше запам’ятати семантику.
ОНОВЛЕННЯ: Спроба очистити свою відповідь і бути точнішою
Позначення Big O - це спосіб характеризувати функції відповідно до темпів зростання. O означає порядок (перший порядок - n другий порядок, n-квадрат тощо). І якщо я не помиляюсь, це був би найгірший сценарій для методів виконання (або зберігання) з заданими N елементами. Чим більше замовлення, тим гірший спосіб виконує метод.
Наприклад, пошук запису в масиві - це O (1) (я вірю в деяку реалізацію хеш-таблиць, що теж є). Додавання значення до кінця списку посилань буде O (N), оскільки вам доведеться дійти до кінця списку, перш ніж ви зможете додати елемент тощо.
Ця відповідь повинна бути трохи правильнішою, ніж моя перша спроба :)