Що таке O у Big O?


23

Що таке Big і O у позначенні Big O? Я прочитав визначення, і це не говорить про те, що O вимовляється як "о". Наприклад - я розумію, що O (n) - це складність лінійного алгоритму, де n може бути числом операцій. але що таке О ?


13
Це 15-а літера англійського алфавіту. Це також 15-та літера грецького алфавіту.
Джоель Етертон

1
Просто для уточнення: Ви шукаєте причину, чому O - символ, який використовується (замість Q чи E або щось інше), і яке значення O , якщо таке є, має над іншими символами?
FrustratedWithFormsDesigner

6
@Joel: Власне, це Omicron, і це підказка, чому саме цей лист був обраний.
Jörg W Mittag

ця відповідь спростовує (правильно, я вважаю) теорію Омікрона.
Хокі Паркер

Відповіді:


31

Ну, я здогадуюсь, був би порядок, який збігається з вікіпедією .

Редагувати: (мій власний (будь-які покращення)) переклад зі статті німецької вікіпедії

Велика літера O (насправді велика омікрона на той час) як символ для порядку (німецька: "Ordnung von") вперше була використана німецьким теоретиком чисел Полом Бахманом у другому випуску своєї книги з теорії аналітичних чисел в 1894 р. Позначення набуло популярності завдяки праці Едмунда Ландау, іншого німецького теоретика чисел, з яким ця номенклатура широко пов'язана з сьогодні, особливо в німецькій термінології.


5
Хоча, можливо, багато математиків називали це таким, але спочатку це не було так. Якщо ви прочитаєте книги теорії чисел з початку 20 століття, ви не знайдете такого пояснення. Це те, що це таке, і я не можу прочитати німецьку мову, щоб зрозуміти, що його думка стосується позначень.
Джонатан Хенсон

1
@Jonathan: Публікація оновлена.
back2dos

Дуже хороша! Я заглянув у всі мої книги з теорії чисел, і ніде не міг знайти пояснення O. +1
Джонатан Хенсон

2
Я завжди вимовляв це як порядок, так як просто сказати О не означає багато.
Ньютопський

16

"Великий" означає "капітал", а "О" означає порядок, як і "порядок складності". Так названо через умову написання "порядку складності" як O (f (x)), наприклад, з великої літери "O" або "Big O". Ніхто не говорить про це багато, тому що "всі" розуміють, що це означає, і розуміння цього насправді не допомагає зрозуміти аналіз складності.

Для розуміння аналізу складності, я думаю, що посилання, розміщене topgun_ivard, є хорошим місцем для початку. Хороший вступний підручник, що охоплює структури даних або алгоритми, також може допомогти.


5
Вибачте, але позначення Бахмана-Ландау було винайдено німецьким математиком, тому я навряд чи думаю, що він назвав би його англійським словом. Насправді, навіть якби його винайшов американський математик, він, мабуть, все-таки був би названий на честь німецького слова, тому що коли його винайшли (приблизно в 1920 році, я думаю), міжнародна мова математики була німецькою. Плюс, це навіть навіть віддалено не має нічого спільного зі складністю.
Jörg W Mittag

1
@ Jörg: Так, але хіба це не був би Ordnung , про який походить німецька стаття у вікі: de.wikipedia.org/wiki/Landau-Symbole#Geschichte
back2dos

1
@Ethel ви могли б змінити свою статтю, щоб я міг вас проголосувати? Ви справді правильні. Ви повинні редагувати, перш ніж я можу проголосувати.
Джонатан Хенсон

1
@Jonathan, я не впевнений, якої саме незначної зміни ти хочеш. Чи можете ви просто продовжувати та робити потрібні зміни? Або ми можемо просто дати відповідь back2dos стояти, схоже, він все-таки отримав найкращу відповідь у будь-якому випадку завдяки чудовому дослідженню :)
Етел Еванс

1
Гм, цікаво. У Швеції Великого Оха зазвичай називають "ордо" (лат. Для, ну, наказ), а не "наказ" (шведське слово для порядку).
Ватін

11

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" (німецьке за "замовлення", якщо були сумніви) у будь-якому випадку, але це все ще може залишити відкритим використання вигадливий грек О.

Однак походження омікрона є скоріше ретронімом завдяки Дональду Кнуту, який представив символи омега (Ω) і тета (Θ) для споріднених понять у своїй роботі « Великий Омікрон» та «Велика Омега» та «Велика Тета» , або, можливо, Харді та Літлвуд, які ввели символ омеги раніше.


2
Цікаво. Я гадаю, ви праві. Я просто переглянув визначення в книгах Ландау та Бахмана, і вони справді а) вживають латинське О, а не грецький Омікрон; б) обидва використовують слово "Орднунг", і в) Ландау прямо заявляє, що воно означає "Орднунг" . Я стою виправлений.
Йорг W Міттаг

Яке краще слово можна було знайти? Я маю на увазі, від німецької? Ordnung ist das halbe Leben!
JensG

Я думаю, що перше речення вашої (правильної, виправданої, дивовижної) відповіді повинно звучати так: "O означає" Ordnung "(німецьке означає" замовлення ")." Це допомогло б цій відповіді привернути увагу інших читачів.
Хокі Паркер

5

Мені подобається ця стаття , сподіваючись, що ви також знайдете її корисною!

Цитуючи розділ із статті:
Великі грецькі листи

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 не є тестом на ефективність алгоритму. Це також умовне або абстрактне, оскільки воно прагне ігнорувати інші фактори. Складність алгоритму сортування зазвичай зводиться до кількості елементів, відсортованих як ключових факторів. Це добре, але він не враховує таких питань, як:

Використання пам'яті: один алгоритм може використовувати набагато більше пам'яті, ніж інший. Залежно від ситуації це може бути що-небудь від абсолютно нерелевантного до критичного; Вартість порівняння: Можливо, порівняння елементів дійсно дороге, що потенційно може змінити будь-яке порівняння в реальному світі між алгоритмами; Вартість переміщення елементів: копіювання елементів зазвичай дешеве, але це не обов'язково; тощо.


5
Просто посилання на статтю не надто корисно. Зазвичай корисно перефразовувати або цитувати розділ, який вам здається особливо актуальним для теми.
Дем'ян Брехт

3
Чи справді необхідні голоси? Стаття, яку він пов'язав, дуже актуальна, і ІМХО дуже корисна. Тим часом, голосова відповідь - це посилання на статтю у Вікіпедії. +1, щоб компенсувати лицемірство вулика-розуму.
Брендон Морец

1
-1, тому що стаття, хоча вона є дуже приємною і добре написаною статтею, не має нічого спільного з цим питанням.
Йорг W Міттаг

@Jorg, я ніколи не говорив, що стаття вирішить проблему, але я поділився тим, що вважав це корисним під час перегляду цих понять.
topgun_ivard

3
@topgun_ivard: Що ж станеться, якщо воно перетвориться на мертве посилання? Перефразовування дозволяє 1) аудиторі цього потоку отримати версію вашої посилання на нотатки Коула (час - гроші), і 2) гарантує, що ваша публікація не стане нерелевантною на мертвому посиланні.
Дем'ян Брехт

2

"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 року


2

EDIT: Виявляється, я помиляюся. Тим не менш, можливо, це допомагає комусь зберігати свої символи прямо, тому я не збираюся їх видаляти.


Власне, це не латинська літера О , це грецька літера Омікрон . На жаль, ці два має точно такий же символ, тому, з плином часу, оригінальна версія зіпсувалася, і тепер це просто Ох .

Вибір символу насправді не має особливого значення, він був обраний як мнемонічний пристрій:

  • Омікрон має букви MICRO в ньому, а семантика символу Омікрон приблизно означає "менший за"
  • Омега містить букви МЕГА, а семантика символу Омега приблизно означає "більший за"
  • Тета (Θ) трохи схожий на знак рівності, а семантика символу Тета приблизно означає "дорівнює"

Це воно. У цьому немає ніякого реального значення, це лише гра на слова, якщо ви хочете, щоб допомогти вам легше запам’ятати семантику.


2
Хоча я хотів би повірити вашій мнемонічній пропозиції (це дійсно крута ідея), мені потрібно буде побачити деякі докази того, що це власне оригінальний намір Бахмана. Надайте це, і я поставити вам +1.
Джонатан Хенсон

2
@Jonathan Henson: Мабуть, мене ввів в оману професор Кнут :-)
Йорг W Міттаг

-5

ОНОВЛЕННЯ: Спроба очистити свою відповідь і бути точнішою

Позначення Big O - це спосіб характеризувати функції відповідно до темпів зростання. O означає порядок (перший порядок - n другий порядок, n-квадрат тощо). І якщо я не помиляюсь, це був би найгірший сценарій для методів виконання (або зберігання) з заданими N елементами. Чим більше замовлення, тим гірший спосіб виконує метод.
Наприклад, пошук запису в масиві - це O (1) (я вірю в деяку реалізацію хеш-таблиць, що теж є). Додавання значення до кінця списку посилань буде O (N), оскільки вам доведеться дійти до кінця списку, перш ніж ви зможете додати елемент тощо.

Ця відповідь повинна бути трохи правильнішою, ніж моя перша спроба :)


2
-1 тому що це просто старий невірний І відповів на окреме запитання, ніж було задано. Питання полягало в тому, чому використовується літера "О", а не "як працює нотація Big O?". Ви неправильно ставитесь до того, як працює Big-Oh, хоча ... прокручування масиву - це O (n), де n - розмір масиву, а не O (1). Позначення не має нічого спільного з "циклами" алгоритму ... це вимірювання верхньої межі часу виконання алгоритму.
Кейсі Паттон

Тут не сперечатися з тобою, але це саме те, що я мав на увазі. Що означає час роботи? Ну, час роботи визначається тим, що доводиться обробляти на машині. Я здогадуюсь, що тут я базуюсь на циклічно. За циклом я думаю, я мав би сказати повторення чи щось подібне. Ти маєш рацію щодо верхньої межі, але це не визначає середнього значення. Тому я приймаю пониження.
SoftwareSavant
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.