Jak O i Ω odnoszą się do najgorszego i najlepszego przypadku?


33

Dzisiaj omawialiśmy na wykładzie bardzo prosty algorytm znajdowania elementu w posortowanej tablicy za pomocą wyszukiwania binarnego . Poproszono nas o określenie jego asymptotycznej złożoności dla szeregu n elementów.

Mój pomysł polegał na tym, że jest to wyraźnie O(logn) lub O(log2n) aby być bardziej szczegółowym, ponieważ log2n to liczba operacji w najgorszym przypadku. Ale mogę zrobić lepiej, na przykład, jeśli uderzę szukany element za pierwszym razem - wówczas dolna granica to Ω(1) .

Wykładowca przedstawił rozwiązanie jako Θ(logn) ponieważ zwykle uwzględniamy tylko najgorsze dane wejściowe dla algorytmów.

Ale kiedy rozważamy tylko najgorsze przypadki, jaki jest sens notowania O i Ω gdy wszystkie najgorsze przypadki danego problemu mają tę samą złożoność ( Θ byłoby wszystkim, czego potrzebujemy, prawda?).

Czego tu brakuje?


@Smaji: Co rozumiesz przez „Ale gdy rozważamy tylko najgorsze przypadki, jaki jest sens posiadania dużego O i dużej notacji Omega, gdy wszystkie najgorsze przypadki mają + - tę samą złożoność (Theta byłaby wszystkim, czego potrzebujemy, prawda?).” proszę wyjaśnij to.
tanmoy

@Smajl: Myślę, że twoje pytanie brzmi: jaka jest konieczność notacji Big O i Big Omega w analizie algorytmów? mam rację?
tanmoy

5
O(log2n) nie jest bardziej szczegółowe niżO(logn) , oznaczają one tę samą klasę funkcji.
Raphael

jest tym samym, co l o g ( b ) / l o g ( 2 ) × l o g b ( n ) dlatego 2 oznacza tylko czynnik, który można usunąć (podobnie jak inne czynniki w dużych -O.log2(n)log(b)/log(2)×logb(n)
ctrl-alt-delor

Odpowiedzi:


39

Notacja Landaua oznacza asymptotyczne granice funkcji . Zobacz tutaj wyjaśnienie różnic między , Ω i Θ .OΩΘ

Czas najgorszy, najlepszy, średni lub nazwa użytkownika to odrębne funkcje środowiska wykonawczego: jedna dla sekwencji najwyższego czasu wykonywania dla danego , jedna dla najniższej itd.n

Same w sobie nie mają ze sobą nic wspólnego. Definicje są niezależne. Teraz możemy iść do przodu i formułować asymptotyczne granice funkcji czasu wykonywania: górny ( ), dolny ( Ω ) lub oba ( Θ ). Możemy to zrobić w najgorszym, najlepszym lub innym przypadku.OΩΘ

Na przykład, w poszukiwaniu binarnego możemy uzyskać najlepsze case wykonania asymptotycznej z i najgorszy asymptotycznej z Θ ( log n ) .Θ(1)Θ(logn)


Najważniejsze dla mnie jest to, że możemy przeprowadzić analizę najgorszego i najlepszego przypadku dowolnego z asymptotycznych funkcji ograniczonych. Dla mnie pokazuje to niezależność analizy Big O od najgorszego przypadku. Dzięki!
Patrick

1
@Patrick Niezupełnie. Po pierwsze, decydujesz, czy chcesz analizować najgorszy, średni czy najlepszy przypadek. Następnie wymyślisz funkcję kosztu (lub możliwie najlepsze przybliżenie). Dopiero wtedy przyjmujesz asymptotyki, jeśli w ogóle.
Raphael

17

Rozważ następujący algorytm (lub procedurę, fragment kodu lub cokolwiek innego):

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)

Jakie jest asymptotyczne zachowanie tej funkcji?

W najlepszym przypadku (gdzie jest parzyste), czas działania wynosi Ω ( n ) i O ( n 2 ) , ale nie ΘnΩ(n)O(n2)Θ niczego.

W najgorszym przypadku (gdzie jest nieparzyste), czas działania wynosi Ω ( n 4 ) i O ( n 5 ) , ale nie ΘnΩ(n4)O(n5)Θ niczego.

W przypadku środowisko wykonawcze wynosi Θ ( n 3 )n=0Θ(n3) .

Jest to trochę wymyślony przykład, ale tylko w celu wyraźnego wykazania różnic między związkiem a sprawą. Można mieć rozróżnienie nabierają znaczenia procedur całkowicie deterministycznych, jeżeli działalność jesteś wykonujący nie ma żadnych znanych granic.Θ


1
Aby uczynić to deterministycznym, podziel według przypadków. nmod4
vonbrand,

4

Niekoniecznie. W tym przypadku, a mianowicie wyszukiwanie binarne na posortowanej tablicy, można zauważyć, że: (a) wyszukiwanie binarne zajmuje co najwyżej kroki; (b) istnieją dane wejściowe, które faktycznie wymuszają tak wiele kroków. Jeśli więc T ( n ) jest czasem wykonywania dla danych binarnych o najgorszym przypadku, można powiedzieć, że T ( n ) = Θ ( log n )[logn+1]T(n)T(n)=Θ(logn) .

Z drugiej strony dla innych algorytmów możesz nie być w stanie wypracować T(n) dokładnie wyliczyć , w którym to przypadku możesz mieć przerwę między górną i dolną granicą dla czasu pracy na wejściu w najgorszym przypadku.

Teraz przy przeszukiwaniu posortowanej tablicy jest coś więcej, co oznacza, że każdy algorytm przeszukiwania posortowanej tablicy musi sprawdzić [logn+1]S[n]|S|2


1

OΘT(n)=n2+n+2T(n)=O(n2)T(n)=Θ(n2)OΘΩOΘ

OΘΘΘ(1)Θ(logn)OO(logn)ΘO, podczas gdy odwrotność niekoniecznie jest prawdziwa.


O(logn)Θ(logn)

@ Rafael Odsyłam cię do definicji dwóch zapisów. Co więcej, zdaj sobie sprawę, że są one używane do klasyfikowania asymptotycznej „stopy wzrostu” czasu działania, a nie samego czasu działania, jak wynika z różnych odpowiedzi i komentarzy.
Hamed Nassar,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.