Різниця між нотацією Big-O та Little-O


Відповіді:


442

f ∈ O (g) говорить, по суті

За принаймні , один вибір постійної до > 0, можна знайти константу , що <має місце для всіх х = е (х) <= кг (х)> а нерівність 0.

Зауважте, що O (g) - це сукупність усіх функцій, щодо яких ця умова виконується.

f ∈ o (g) говорить, по суті

Для кожного вибору константи k > 0 можна знайти константу a таку, що нерівність 0 <= f (x) <kg (x) виконується для всіх x> a.

Ще раз зауважте, що o (g) - це множина.

У Big-O необхідно лише знайти конкретний множник k, для якого нерівність перевищує деякий мінімум x .

У Little-o має бути так, що існує мінімум x, після якого нерівність виконується незалежно від того, наскільки малим ви будете робити k , доки він не від'ємний чи нульовий.

Обидва вони описують верхні межі, хоча дещо протиінтуїтивно, Little-o є сильнішим твердженням. Існує набагато більший розрив між темпами зростання f і g, якщо f ∈ o (g), ніж якщо f ∈ O (g).

Однією з ілюстрацій невідповідності є така: f ∈ O (f) вірно, але f ∈ o (f) помилково. Тому Big-O можна читати як "f ∈ O (g) означає, що асимптотичний ріст f не швидший ніж g", тоді як "f ∈ o (g) означає, що асимптотичний ріст f суворо повільніше, ніж g". Це як <=проти <.

Більш конкретно, якщо значення g (x) є постійним кратним значенням f (x), то f ∈ O (g) вірно. Ось чому ви можете скидати константи під час роботи з нотацією big-O.

Однак, щоб f ∈ o (g) було істинним, тоді g повинна включати у свою формулу більшу потужність x, і тому відносне розділення між f (x) та g (x) повинно насправді збільшуватися, коли x стає більшим.

Щоб використовувати суто математичні приклади (а не посилатися на алгоритми):

Наступне стосується Big-O, але не було б правдою, якби ви використовували little-o:

  • x² ∈ O (x²)
  • x² ∈ O (x² + x)
  • x² ∈ O (200 * x²)

Наступне стосується Little-o:

  • x² ∈ o (x³)
  • x² ∈ o (x!)
  • ln (x) ∈ o (x)

Зауважимо, що якщо f ∈ o (g), то це означає f ∈ O (g). наприклад, x² ∈ o (x³), тож правда також, що x² ∈ O (x³), (знову ж таки, думайте про O як <=і o як <)


146
Так - різниця полягає в тому, чи можуть дві функції бути асимптотично однаковими. Інтуїтивно мені подобається думати про велике-O, що означає "росте не швидше" (тобто росте з тією ж швидкістю або повільніше) і мало-o значення "росте строго повільніше, ніж".
Філ

12
Скопіювати це у вікіпедію? Це набагато краще, ніж те, що там є.
cloudsurfin

1
@SA Так. Це складніший випадок, коли простіше правило, яке я дав про "вищі сили x", очевидно не застосовується. Але якщо ви подивитеся на більш жорсткі граничні визначення, наведені у відповіді Стріланка нижче, то ви хочете знати, якщо lim n-> inf (2 ^ n / 3 ^ n) = 0. Оскільки (2 ^ n / 3 ^ n) = (2/3) ^ n і оскільки для будь-якого 0 <= x <1, lim n-> inf (x ^ n) = 0, то правда, що 2 ^ n = o (3 ^ n).
Тайлер Макенрі

1
Будьте обережні з "У Little-o, повинно бути так, що існує мінімум x, після якого нерівність зберігається незалежно від того, наскільки малим ви будете робити k, доки він не від'ємний чи нульовий." Це не "для кожного aє kте, що: ...", це "для кожного kє aте, що: ..."
GA1

1
"У Little-o має бути так, що існує мінімум x, після якого нерівність зберігається незалежно від того, наскільки малим ви будете робити k, до тих пір, поки він не буде від'ємним або нульовим." ні, це неправильно.
Філіппо Коста,

196

Big-O - це мало-o, як це робити <. Big-O - це верхня межа, що включає, а little-o - це сувора верхня межа.

Наприклад, функція f(n) = 3n:

  • в O(n²), o(n²)іO(n)
  • НЕ O(lg n), o(lg n)абоo(n)

Аналогічно, це число 1:

  • ≤ 2, < 2І≤ 1
  • НЕ ≤ 0, < 0або< 1

Ось таблиця із загальною ідеєю:

Великий o стіл

(Примітка: таблиця є хорошим керівництвом, але її граничне визначення повинно бути в порівнянні з верхньою межею замість нормальної межі. Наприклад, 3 + (n mod 2) вічно коливається між 3 і 4. Це O(1)незважаючи на відсутність нормальної межі, оскільки вона все ще має a lim sup: 4.)

Я рекомендую запам'ятати, як позначення Big-O перетворюється на асимптотичні порівняння. Порівняння легше запам’ятати, але менш гнучкі, тому що ви не можете сказати такі речі, як n O (1) = P.


У мене одне запитання: яка різниця між рядком 3 та 4 (стовпець визначення обмежень)? Чи можете ви, будь ласка, показати мені один приклад, де 4 утримує (lim> 0), а не 3?
Людина в масках

3
О, я зрозумів це. Велика Омега - для lim> 0, Big Oh - для lim <нескінченність, Big Theta - коли виконуються обидва умови, тобто 0 <lim <нескінченність.
Людина в масках

Для f ∈ Ω (g), чи не слід межа в нескінченності оцінювати> = 1? Аналогічно для f ∈ O (g), 1 = <c <∞?
користувач2963623

1
@ user2963623 Ні, тому що кінцеві значення строго вище 0, включаючи значення від 0 до 1, відповідають "однаковій асимптотичній складності, але різним постійним факторам". Якщо опустити значення нижче 1, ви маєте відсічення в просторі з постійним коефіцієнтом замість простору асимптотичної складності.
Крейг Гідні

1
@ubadub Ви транслюєте операцію експоненції над набором. Це вільне позначення.
Крейг Гідні

45

Я вважаю, що коли я не можу концептуально зрозуміти щось, думка про те, чому можна використовувати X , корисно зрозуміти X. (Не кажучи, що ви цього не пробували, я просто встановлюю сцену.)

[речі, які ви знаєте] Поширений спосіб класифікації алгоритмів - це час виконання, і, цитуючи алгоритм великої-ой складності, можна отримати досить хорошу оцінку того, хто з них "кращий" - залежно від того, хто має "найменшу" функцію в О! Навіть у реальному світі O (N) "кращий", ніж O (N²), забороняючи дурні речі, такі як надмасивні константи тощо. [/ Речі, які ви знаєте]

Скажімо, існує деякий алгоритм, який працює в O (N). Дуже добре, так? Але скажімо, ви (геніальна людина, ви) придумали алгоритм, який працює в O ( NloglogloglogN ). ТАК! Це швидше! Але ви будете почувати себе нерозумно, коли це пишете дисертацію. Отже, ви пишете це один раз, і ви можете сказати "У цій роботі я довів, що алгоритм X, раніше обчислюваний за часом O (N), насправді обчислюється в o (n)".

Таким чином, всі знають, що ваш алгоритм швидший --- на скільки незрозумілий, але вони знають його швидше. Теоретично. :)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.