Что именно представляет большая нотация?


179

Я действительно запутался в различиях между большой О, большой Омегой и большой тета-нотацией.

Я понимаю, что большой О - это верхняя граница, а большой Омега - это нижняя граница, но что именно представляет большой Ө (тета)?

Я прочитал, что это значит тесную связь , но что это значит?


Ответы:


93

Это означает, что в данной функции алгоритм является как big-O, так и big-Omega.

Например, если это так Ө(n), то есть некоторая константа k, такая, что ваша функция (время выполнения, что угодно), больше, чем n*kдля достаточно большого n, и некоторая другая константа, Kтакая, что ваша функция меньше, чем n*Kдля достаточно большого n.

Другими словами, для достаточно большого nон зажат между двумя линейными функциями:

Для k < Kи nдостаточно большой,n*k < f(n) < n*K


Это не так, эти переменные немного сбивают с толку, они не связаны.
Аарон Робсон

@committedandroider Нет, они строчные и прописные, поэтому разные, он использует типичный математический стиль, в котором две «похожие» (но никак не связанные здесь) переменные используют большой и маленький регистр.
Сантропедро

330

Сначала давайте разберемся, что такое большой О, большая Тета и большая Омега. Они все наборы функций.

Большой О дает верхнюю асимптотику , в то время как большая Омега дает нижнюю границу. Большая Тета дает оба.

Все , что есть Ө(f(n))также O(f(n)), но не наоборот.
T(n)Говорят, что в, Ө(f(n))если это и в O(f(n))и в Omega(f(n)).
В терминологии множеств, Ө(f(n))является пересечением из O(f(n))иOmega(f(n))

Например, худший случай сортировки слиянием - это O(n*log(n))и Omega(n*log(n))- и, следовательно, также Ө(n*log(n)), но это также так O(n^2), поскольку n^2он асимптотически «больше», чем он. Однако это не так Ө(n^2) , поскольку алгоритм не является Omega(n^2).

Немного глубже математическое объяснение

O(n)асимптотическая верхняя граница. Если T(n)есть O(f(n)), то это значит, что из определенного n0есть константа Cтакая, что T(n) <= C * f(n). С другой стороны, большой Omega говорит , что существует постоянная C2такая , что T(n) >= C2 * f(n))).

Не путай!

Не путать с анализом наихудших, лучших и средних случаев: все три нотации (Omega, O, Theta) не связаны с анализом алгоритмов на основе лучшего, наихудшего и среднего случаев. Каждый из них может быть применен к каждому анализу.

Мы обычно используем его для анализа сложности алгоритмов (как пример сортировки слиянием выше). Когда мы говорим «Алгоритм А есть O(f(n))», мы на самом деле имеем в виду «сложность алгоритмов при анализе наихудшего 1 случая O(f(n))» - это означает - он масштабирует «похожую» (или формально, не хуже) функциюf(n) .

Почему мы заботимся об асимптотической границе алгоритма?

Ну, есть много причин для этого, но я считаю, что наиболее важными из них являются:

  1. Определить точную функцию сложности гораздо сложнее , поэтому мы «идем на компромисс» с нотациями большого-большого-большого-тета, которые теоретически достаточно информативны.
  2. Точное количество операций также зависит от платформы . Например, если у нас есть вектор (список) из 16 чисел. Сколько операций это займет? Ответ: это зависит. Некоторые процессоры допускают добавление векторов, а другие - нет, поэтому ответ различается в разных реализациях и на разных машинах, что является нежелательным свойством. Однако нотация big-O гораздо более постоянна между машинами и реализациями.

Чтобы продемонстрировать эту проблему, взгляните на следующие графики: введите описание изображения здесь

Понятно, что f(n) = 2*n"хуже" чем f(n) = n. Но отличие не так сильно, как от другой функции. Мы видим, что f(n)=lognбыстро становится намного ниже, чем другие функции, и f(n) = n^2быстро становится намного выше, чем другие.
Итак, по причинам, указанным выше, мы «игнорируем» постоянные множители (2 * в примере с графиками) и принимаем только обозначение big-O.

В приведенном выше примере, f(n)=n, f(n)=2*nбудут как O(n)и в Omega(n)- и, следовательно, также будет в Theta(n).
С другой стороны - f(n)=lognбудет в O(n)(это "лучше", чем f(n)=n), но не будет в Omega(n)- и, следовательно, также не будет в Theta(n).
Симметрично f(n)=n^2будет Omega(n), но НЕ в O(n), а значит - тоже НЕТ Theta(n).


+1 Обычно, правда, не всегда. когда класс анализа (худший, средний и лучший) отсутствует, мы действительно имеем в виду худший случай.


4
@krishnaChandra: f(n) = n^2асимптотически сильнее n, и, следовательно, омега (n). Однако это не O (n) (потому что для больших nзначений оно больше c*n, чем для всех n). Поскольку мы сказали, что Theta (n) является пересечением O (n) и Omega (n), так как это не O (n), это также не может быть Theta (n).
Амит

8
Приятно видеть, как кто-то объясняет, как нотация big-O не связана с временем выполнения алгоритма в наилучшем / худшем случаях. Есть так много сайтов, которые появляются, когда я гуглю тему, которая говорит, что O (T (n)) означает худшее время выполнения.
Уилл Сьюэлл

1
@almel Это 2 * n (2n, два раза n), а не 2 ^ n
amit

5
@VishalK 1. Big O - верхняя граница, когда n стремится к бесконечности. 2. Омега является нижней границей, когда n стремится к бесконечности. 3. Тета является верхней и нижней границей, поскольку n стремится к бесконечности. Обратите внимание, что все границы действительны только «так как n стремится к бесконечности», потому что границы не выполняются для низких значений n (меньше, чем n0 ). Оценки выполняются для всех nn0 , но не ниже n0, где члены более низкого порядка становятся доминирующими.
Bain

1
@hey_you Прочитайте ответ еще раз. Big O, Theta, Omega для функций, а не алгоритмов. Сортировка слиянием - Омега (n) худший случай. Это также O (n ^ 2) лучший случай. Это также Theta (nlogn) худший случай. По сути, для каждого анализа (худший / лучший / средний / ...) у вас есть функция сложности T_best(n), T_worst(n), T_average(n). Они не должны быть идентичными (и в основном они не являются). O / Omega / Theta можно применять к любому из них независимо.
Амит

14

Тета (n): функция f(n)принадлежит Theta(g(n)), если существуют положительные постоянные c1и c2такие, которые f(n)могут быть расположены между c1(g(n))и c2(g(n)). то есть дает как верхнюю, так и нижнюю границу.

Тета (g (n)) = {f (n): существуют положительные постоянные c1, c2 и n1, такие что 0 <= c1 (g (n)) <= f (n) <= c2 (g (n)) для всех n> = n1}

когда мы говорим f(n)=c2(g(n))или f(n)=c1(g(n))это представляет асимптотически жесткую границу.

O (n): он дает только верхнюю границу (может быть или не быть жестким)

O (g (n)) = {f (n): существуют положительные постоянные c и n1, такие что 0 <= f (n) <= cg (n) для всех n> = n1}

пример : граница 2*(n^2) = O(n^2)асимптотически жесткая, тогда как граница 2*n = O(n^2)не асимптотически жесткая.

o (n): он дает только верхнюю границу (никогда не жесткую границу)

заметная разница между O (n) и o (n) в том, что f (n) меньше, чем cg (n) для всех n> = n1, но не равна, как в O (n).

бывший :, 2*n = o(n^2)но2*(n^2) != o(n^2)


1
Вы не упомянули большую Омегу, которая относится к нижней границе. В противном случае, очень хороший первый ответ и добро пожаловать!
Богни

1
мне понравилось, как он сформулировал определение тэты (n). Upvoted!
user720694


1

Большая тэта нотация:

Ничего, чтобы испортить приятель!

Если у нас есть функции с положительными значениями f (n) и g (n) принимает аргумент с положительными значениями n, то ϴ (g (n)) определяется как {f (n): существуют константы c1, c2 и n1 для всех n> = n1}

где c1 g (n) <= f (n) <= c2 g (n)

Давайте возьмем пример:

пусть f (n) =

г (п) =

с1 = 5 и с2 = 8 и n1 = 1

Среди всех нотаций ϴ нотация дает лучшую интуицию о скорости роста функции, потому что она дает нам жесткую границу в отличие от big-oh и big -omega, которая дает верхнюю и нижнюю границы соответственно.

ϴ говорит нам, что g (n) максимально приближена к f (n), скорость роста g (n) максимально приближена к скорости роста f (n).

увидеть изображение, чтобы получить лучшую интуицию


0

Прежде всего Теория

  1. Большой O = Верхний предел O (n)

  2. Тета = функция порядка - тета (n)

  3. Омега = Q-нотация (нижний предел) Q (n)

Почему люди так растеряны?

Как во многих блогах и книгах подчеркивается это утверждение

«Это Большой О (п ^ 3)» и т. Д.

и люди часто путают как погода

O (n) == theta (n) == Q (n)

Но стоит помнить, что это всего лишь математическая функция с именами O, Theta & Omega

поэтому они имеют одну и ту же общую формулу полинома,

Позволять,

f (n) = 2n4 + 100n2 + 10n + 50, то

g (n) = n4, поэтому g (n) - это функция, которая принимает функцию в качестве входного и возвращает переменную с большей мощностью,

То же самое f (n) & g (n) для ниже всех объяснений

Big O - функция (обеспечивает верхнюю границу)

Большой O (n4) = 3n4, потому что 3n4> 2n4

3n4 - это значение Big O (n4), так же как f (x) = 3x

n4 играет роль х вот так,

Заменив n4 на x'so, Big O (x ') = 2x', теперь мы оба счастливы. Общая концепция

Итак, 0 ≤ f (n) ≤ O (x ')

O (x ') = cg (n) = 3n4

Ввод стоимости,

0 ≤ 2n4 + 100n2 + 10n + 50 ≤ 3n4

3n4 - наша верхняя граница

Тета (n) обеспечивает нижнюю границу

Тета (n4) = cg (n) = 2n4, потому что 2n4 ≤ Наш пример f (n)

2n4 - значение тета (n4)

Итак, 0 ≤ cg (n) ≤ f (n)

0 ≤ 2n4 ≤ 2n4 + 100n2 + 10n + 50

2n4 - наша нижняя граница

Омега н - функция заказа

Это рассчитывается, чтобы узнать, что нижняя граница погоды похожа на верхнюю границу,

Случай 1). Верхняя граница похожа на нижнюю границу

if Upper Bound is Similar to Lower Bound, The Average Case is Similar

Example, 2n4 ≤ f(x) ≤ 2n4,
Then Omega(n) = 2n4

Случай 2). если верхняя граница не похожа на нижнюю

in this case, Omega(n) is Not fixed but Omega(n) is the set of functions with the same order of growth as g(n).

Example 2n4 ≤ f(x) ≤ 3n4, This is Our Default Case,
Then, Omega(n) = c'n4, is a set of functions with 2 ≤ c' ≤ 3

Надеюсь, что это объяснили!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.