Що саме являє собою велике позначення?


179

Я дійсно розгублений у зв'язку з різницею між великою O, великою Омегою та великою тета-нотацією.

Я розумію, що велика О - це верхня межа, а велика Омега - нижня межа, але що саме являє великий Ө (тета)?

Я читав, що це означає щільно пов'язане , але що це означає?


Відповіді:


93

Це означає, що в даній функції алгоритм є і великим-O, і великим-Omega.

Наприклад, якщо він є Ө(n), то є деяка константа k, така, що ваша функція (час виконання, будь-яка інша ) є більшою, ніж n*kдля досить великої n, і якась інша константа, Kтака, що ваша функція менша, ніж n*Kдля досить великої n.

Іншими словами, для достатньо великих розмірів nвін замикається між двома лінійними функціями:

Для k < Kі nдосить велике,n*k < f(n) < n*K


Ні, ці змінні трохи заплутані, вони не пов'язані між собою.
Аарон Робесон

@commissandroider Ні, вони мають малі та великі регістри, тому вони використовують типовий математичний стиль, у якому дві "схожі" (але ніяк не пов'язані тут) змінні використовують великий і малий регістр.
Сантропедро

329

Спершу розберемося, що таке велика О, велика Тета та велика Омега. Вони всі набори функцій.

Великий O дає верхню асимптотичну межу , а великий Omega - нижню. Велика Тета дає і те, і інше.

Все, що є Ө(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) не пов'язані з аналізом алгоритмів найкращих, найгірших та середніх випадків. Кожен з них може бути застосований до кожного аналізу.

Зазвичай ми його використовуємо для аналізу складності алгоритмів (як приклад сортування злиття вище). Коли ми говоримо "Алгоритм A є O(f(n))", то, що ми насправді маємо на увазі, "складність алгоритмів під найгіршим аналізом 1 випадку O(f(n))" - це означає - він масштабує "аналогічну" (або формально, не гіршу) функцію f(n).

Чому ми піклуємося про асимптотичну зв’язаність алгоритму?

Ну, причин для цього багато, але я вважаю, що найважливіші з них:

  1. Набагато складніше визначити точну функцію складності, тому ми "робимо компроміс" щодо нотацій big-O / big-Theta, які є теоретично досить інформативними.
  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). Оскільки ми сказали, що Тета (n) є перетином O (n) та Omega (n), оскільки це не O (n), воно також не може бути Theta (n).
amit

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 Прочитайте ще раз відповідь. великі O, Theta, Omega призначені для функцій, а не алгоритмів. Злиття сорту - найгірший випадок Омега (n). Це також найкращий випадок O (n ^ 2). Це також гірший випадок Theta (nlogn). В основному, для кожного аналізу (найгірший / найкращий / середній / ...) ви маєте функцію складності T_best(n), T_worst(n), T_average(n). Вони не повинні бути однаковими (і в основному вони не є). O / Omega / Theta можна застосовувати до будь-якого з них незалежно.
Аміт

14

Theta (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
Ви не згадали про велику Омегу, яка стосується нижньої межі. Інакше дуже приємна перша відповідь і ласкаво просимо!
bohney

1
мені сподобалось те, як він обрамив визначення Тети (п). Оголошено!
користувач720694


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) =

g (n) =

c1 = 5 і c2 = 8 і n1 = 1

Серед усіх позначень ϴ позначення дає найкращу інтуїцію щодо швидкості росту функції, оскільки вона дає нам щільну межу на відміну від великої-ой та великої -омеги, яка дає верхню та нижню межі відповідно.

ϴ говорить нам, що g (n) максимально близький f (n), швидкість росту g (n) максимально наближена до швидкості зростання f (n).

побачити зображення, щоб отримати кращу інтуїцію


0

Перш за все теорія

  1. Великий O = верхня межа O (n)

  2. Theta = Функція замовлення - theta (n)

  3. Омега = Q-позначення (нижня межа) Q (n)

Чому люди так заплутані?

У багатьох блогах і книгах, як підкреслюється ця заява, схоже

"Це великий O (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 грає роль x тут,

Замінивши n4 на x'so, Big O (x ') = 2x', тепер ми обоє задоволені Загальною концепцією

Отже 0 ≤ f (n) ≤ O (x ')

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

Цінність,

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

3n4 - наша верхня межа

Theta (n) забезпечує нижню межу

Тета (n4) = cg (n) = 2n4 Тому що 2n4 ≤ наш приклад f (n)

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

значить, 0 ≤ cg (n) ≤ f (n)

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

2n4 - наша нижня межа

Омега n - функція замовлення

Це обчислюється, щоб дізнатися, що нижня межа Погоди схожа на верхню межу,

Випадок 1). Верхній зв’язок схожий на нижній

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

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

Випадок 2). якщо верхній Bound не схожий на нижній

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.