Як O і Ω ставляться до найгіршого та найкращого випадку?


33

Сьогодні ми обговорили на лекції дуже простий алгоритм пошуку елемента в відсортованому масиві за допомогою двійкового пошуку . Нас попросили визначити його асимптотичну складність для масиву з елементів.n

Моя ідея полягала в тому, що очевидно або є більш конкретним, оскільки - кількість операцій в гіршому випадку. Але я можу зробити краще, наприклад, якщо вперше потрапив на шуканий елемент - тоді нижня межа .O(logn)O(log2n)log2nΩ(1)

Лектор представив рішення як оскільки ми зазвичай розглядаємо лише найгірші випадки введення алгоритмів.Θ(logn)

Але якщо розглядати лише найгірші випадки, який сенс мати і -позначення, коли всі найгірші випадки даної проблеми мають однакову складність ( було б усе, що нам потрібно, правда?).OΩΘ

Що я тут пропускаю?


@Smaji: Що ви маєте на увазі під "Але якщо розглядати лише найгірші випадки, який сенс мати великі O і великі позначення Омеги, коли всі найгірші випадки мають + - однакової складності (Theta було б все, що нам потрібно, правда?"). будь ласка, уточніть це.
tanmoy

@Smajl: Я думаю, що ваше запитання таке: у чому полягає необхідність позначення Big O та Big Omega в аналізі алгоритму? я прав?
танмой

5
O(log2n) не є більш конкретним, ніжO(logn) , вони позначають той самий клас функцій.
Рафаель

- те саме, що l o g ( b ) / l o g ( 2 ) × l o g b (log2(n) тому 2 просто вказує на коефіцієнт, який можна усунути (як і інші фактори у великій -О.log(b)/log(2)×logb(n)
ctrl-alt-delor

Відповіді:


39

Позначення Ландау позначає асимптотичні межі функцій . Дивіться тут для пояснення різниць між , Ω і Θ .OΩΘ

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

Вони самі по собі не мають нічого спільного. Визначення незалежні. Тепер ми можемо продовжувати і формулювати асимптотичні межі на функціях виконання: верхній ( ), нижній ( Ω ) або обидва ( Θ ). Ми можемо зробити або в гіршому, найкращому, або в будь-якому іншому випадку.OΩΘ

Наприклад, у двійковому пошуку ми отримуємо асимптотику найкращого випадку виконання та асимптотику найгіршого випадку ΘΘ(1) .Θ(logn)


Для мене ключовим фактором є те, що ми можемо робити найгірший аналіз найкращого випадку на будь-якій з асимптотичних обмежених функцій. Як мені здається, це показує незалежність аналізу Big O vs. Спасибі!
Патрік

1
@Patrick Не зовсім. FIrst, ви вирішуєте, чи хочете ви проаналізувати найгірший, середній чи кращий випадок. Тоді ви придумуєте функцію витрат (або настільки ж гарне наближення). Тільки тоді ви приймаєте асимптотику, якщо вона взагалі є.
Рафаель

17

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

Contrive(n)
1. if n = 0 then do something Theta(n^3)
2. else if n is even then
3.    flip a coin
4.    if heads, do something Theta(n)
5.    else if tails, do something Theta(n^2)
6. else if n is odd then
7.    flip a coin
8.    if heads, do something Theta(n^4)
9.    else if tails, do something Theta(n^5)

Яка асимптотична поведінка цієї функції?

У кращому випадку (де парне) час виконання - Ω ( n ) та O ( n 2 ) , але неnΩ(n)O(n2) нічого.Θ

У гіршому випадку (де непарне) час виконання - Ω ( n 4 ) і O ( n 5 ) , але не Θ нічого.nΩ(n4)O(n5)Θ

У випадку час виконання дорівнює Θ ( n 3 ) .n=0Θ(n3)

Це трохи надуманий приклад, але лише для того, щоб наочно продемонструвати відмінності між зв'язаним та випадковим. Ви могли б мати відмінність стає значущим з повністю детермінованими процедурами, якщо діяльність ви виконуєте не має ніяких відомих & кордонів.Θ


1
Щоб зробити це детермінованим, розділіть по випадки. nmod4
vonbrand

4

Не обов'язково. У цьому випадку, а саме двійковому пошуку за відсортованим масивом, ви бачите, що: (a) двійковий пошук виконує щонайбільше кроків; (b) є вхідні дані, які фактично змушують виконувати ці кроки. Отже, якщо T ( n ) - час запуску в гіршому випадку для двійкового пошуку, ви можете сказати, що T ( n ) = Θ ( log n )[logn+1]T(n)T(n)=Θ(logn) .

З іншого боку, для інших алгоритмів ви не зможете опрацювати T(n) точно , і в цьому випадку у вас може виникнути розрив між верхньою та нижньою межами часу роботи на гіршому випадку.

Тепер для пошуку відсортованого масиву є істинним щось більше, тобто те, що будь-який алгоритм для пошуку відсортованого масиву повинен перевіряти . Для цього типу нижньої межі вам потрібно проаналізувати саму проблему. (Ось ідея: в будь-який час алгоритм пошуку не виключив деякий набір S [ n ] позицій, де може бути шуканий елемент. Ретельно продуманий вхід може гарантувати зменшення | S | максимум коефіцієнт 2 ).[logn+1]S[n]|S|2


1

Ви маєте рацію, багато людей неохайно використовують O коли їм слід користуватися Θ . Наприклад, аналітик алгоритму може закінчити функцію часу T(n)=n2+n+2 і негайно зробити висновок, що T(n)=O(n2) , що технічно правильно, але більш чітке твердження було б T(n)=Θ(n2) . Я пов'язую цю забуту поведінку з двома причинами. По-перше, багато хто бачить Oбути більш популярним і прийнятним, можливо, через свою довгу історію. Нагадаємо, що він був введений більше століття тому, тоді як ΘΩ ) були введені лише в 1976 році (Дональд Кнут). По-друге, це може бути тому, що O легко доступний на клавіатурі, тоді як Θ - ні!

З технічної точки зору, головна причина, коли дбайливі аналітики вважають за краще використовувати O над Θ це те, що перша охоплює "більшу територію", ніж остання. Якщо ми візьмемо ваш приклад двійкового пошуку і хочемо використовувати Θ , нам доведеться зробити два твердження: \ одне для кращого випадку, а саме Θ(1) , а інше для гіршого випадку, а саме Θ(logn) . За допомогою O ми робимо лише одне твердження, а саме O(logn) . Математично функції, охоплені Θ , також охоплені O, тоді як навпаки не обов'язково правда.


Ласкаво просимо, і дякуємо, що знайшли час для публікації відповіді! Однак я не можу сказати, у чому тут ваша думка. У першому пункті ви пропонуєте певні домисли. По-друге, ви пропонуєте точку зору, яка є "неохайною" сама по собі: мовляв "це середній випадок" нічого не говорить про найкращий випадок, крім того, що його в тому ж класі. Говорячи, що "це Θ ( log n ) середній випадок", має на увазі ту саму верхню межу! Якщо ви хочете подати додаткову інформацію про кращий випадок, вам доведеться надати це явно в будь-якому випадку. Тому я не бачу, як ви вказуєте на точку використання O над Θ.O(logn)Θ(logn)

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