Разница между обозначениями Big-O и Little-O

в чем разница между Big-O обозначение O(n) и Маленький-O обозначение o(n)?

3 ответов


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

на по крайней мере один выбор константы k > 0, вы можете найти константу a такое, что неравенство 0 a.

обратите внимание, что O (g) - это набор всех функций, для которых выполняется это условие.

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

на выбор константы k > 0, вы можете найти постоянную a такое, что неравенство 0 a.

еще раз обратите внимание, что o(g) - это набор.

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

в Little-o, должно быть, есть минимум x после чего неравенство сохраняется независимо от того, насколько вы малы make k, пока он не отрицательный или нулевой.

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

<= и <.

более конкретно, если значение g(x) является постоянным кратным значению f(x), то F ∈ O (g) истинно. Вот почему вы можете бросить константы при работе с большой-о нотации.

однако, чтобы F ∈ o(g) было истинным, тогда g должен включать более высокий сила x в его формуле, и поэтому относительное разделение между f (x) и g (x) должно фактически получить больше, чем x становится больше.

использовать чисто математические примеры (а не ссылаться на алгоритмы):

следующее верно для Big-O, но не было бы верно, если бы вы использовали little-o:

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

для little-o верно следующее:

  • x2 ∈ o (x3)
  • x2 ∈ o(x!)
  • ln (x) ∈ o (x)

обратите внимание, что если f ∈ o (g), это означает f ∈ O(g). например, x2 ∈ o(x3), поэтому также верно, что x2 ∈ O (x3), (опять же, подумайте о O как <= и o as <)


Big-O для little-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

Вот таблица, показывающая общую идею:

Big o table

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

Я рекомендую запоминать, как обозначение Big-O преобразуется в асимптотические сравнения. Сравнения легче запомнить, но менее гибкие, потому что вы не можете сказать такие вещи, как nO (1) = П.


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

[вещи вы знаете]общий способ классификации алгоритмов по времени выполнения, и, ссылаясь на большие-о сложности алгоритма, можно получить достаточно хорошую оценку, какой из них "лучше" -- в зависимости от того, имеет "маленький" функция в o! Даже в реальном мире O (N) "лучше", чем O(N2), за исключением глупых вещей, таких как сверхмассивные константы и тому подобное.[/вещи, которые вы знаете]

предположим, что есть некоторый алгоритм, который работает в O (N). Неплохо, да? Но предположим, вы (вы блестящий человек, вы) придумаете алгоритм, который работает в O (NloglogloglogN). УРА! Быстрее! Но вы чувствовали бы себя глупо писать это снова и снова, когда вы пишете свою диссертацию. Итак, вы пишете это один раз, и вы можете сказать: "в этой статье я доказал этот алгоритм X, ранее вычисляемый во времени O(N), фактически вычисляется в o (n)."

таким образом, все знают, что ваш алгоритм быстрее --- на сколько неясно, но они знают его быстрее. Теоретически. :)