Jaka jest „właściwa” definicja górnej i dolnej granicy?


19

Niech będzie najgorszym czasem działania problemu na wejściu wielkości . Uczyńmy ten problem nieco dziwnym, ustalając dla ale dla .f(n)nf(n)=n2n=2kf(n)=nn=2k+1

  1. Więc jaka jest dolna granica problemu? Zrozumiałem, że to tylko dolna granica . Ale wiemy, że oznacza, że ​​istnieje stała , taka, że ​​dla wszystkich , , co nie jest prawdą. Wydaje się więc, że możemy powiedzieć tylko . Ale zwykle nazywamy problem dolną granicą , prawda?f(n)f(n)=Ω(n2)kn0n>n0f(n)>kn2f(n)=Ω(n)Ω(n2)

  2. Zakładając, że , co oznacza, że ​​istnieje stała , taka, że ​​dla wszystkich , . Załóżmy również, że problem ma czas działania . Jeśli możemy zmniejszyć ten problem dla wszystkich liczb pierwszych do innego problemu (przy tym samym rozmiarze wejściowym), czy możemy powiedzieć, że czas działania innego problemu ma dolną granicę ?g(n)=Ω(n2)kn0n>n0g(n)>kn2g(n)nΩ(n2)


12
Dlatego matematycy używają lim sup i lim inf.
— Peter Shor,

1
Więc myślę, że rozumiem różnicę. Myślę, że post użytkownicy będą rozumieli Omegę tak często. Ale w przypadku, gdy chcę wprowadzić wyraźne rozróżnienie, czy mogę użyć innych zapisów niż rozwinąć je?
— Wei Yu

3
@Wei Yu: lim sup i lim inf. Mówisz dla jakiegoś stałego k, jeśli chcesz powiedzieć, że g (n) \ geq kn ^ 2 nieskończenie często, i \ liminf \ frac {g ( n)} {n ^ 2} \ geq k, jeśli chcesz powiedzieć g (n) \ geq kn ^ 2 dla wszystkich odpowiednio dużych n . \ Zwłaszcza jeśli rozmawiasz z matematykami.
lim supg(n)n2≥k
kg(n)≥kn2
lim infg(n)n2≥k
g(n)≥kn2n
 
— Peter Shor,

12
@Wei: Dla większości teoretyków złożoności (patrz Lance poniżej), twoją funkcją jest θ (n ^ 2); dla większości algorytmów (patrz Knuth lub CLRS), twoją funkcją jest Ο (n ^ 2) i Ω (n). Oba oznaczenia są prawie, ale nie całkowicie, standardem w ich społecznościach podrzędnych; co gorsza, te dwie podspołeczności mocno się pokrywają! Więc jeśli ma to znaczenie, które notacja używać, to trzeba powiedzieć wyraźnie których notacja używasz. (Na szczęście rzadko ma to znaczenie.)
— Jeffε

2
@Jeffe. Uważam, że powinieneś opublikować swój komentarz jako odpowiedź.
— chazisop

Odpowiedzi:


13

Prawidłowa definicja jest taka, że ​​istnieje pewne takie, że dla nieskończenie wielu , . Nieskończenie często definicja dolnych granic obsługuje Twoje problemy i określa, w jaki sposób używamy jej w praktyce.f(n)=Ω(n2)k>0nf(n)≥kn2

Napisałem o tym post w 2005 roku.

Niektóre podręczniki mają tę definicję, inne nie.


14
Knuth nie zgadza się z tobą: portal.acm.org/citation.cfm?id=1008329
— Jeffε

4
CLRS i Wikipedia również nie zgadzają się z tobą. Nieskończenie często definicja jest godną uwagi alternatywą, ale wydaje się, że jest rzadziej stosowana.
— Anonimowy

myślę, że wszystkie te definicje są zgodne, gdy zbiorem wyjątków jest miara 0.
— Carter Tazio Schonwald

2
Problem z definicjami „nieskończenie często” polega na tym, że zwykle nie wykluczają „nieskończenie często nie”. Mamy więc okropną konsekwencję, że z tą definicją ale także , gdzie i mają być ścisłymi porządkami w niektórych sens. Naprawdę nie lubię tego. Przynajmniej sugestia @ Cartera o wyjątkach miary 0 jest nieco mniej okropna, a jednocześnie pozwala na lepsze zamówienie niż zwykle. f(n)=Ω(n2) f(n)=o(n+1)Ωo
— András Salamon,

2
@Jukka: Nie, ja nadużywania tutaj. Jak sugerujesz, muszę poprawić mój argument, aby użyć zamiast . Niech mi zatem przekształcić rzeczywisty sprzeciw bez użycia lub . W przypadku „nieskończenie często” anomalia polega na tym, że , , a jednak . Tak więc nawet nie tworzy przedsprzedaży. oOooOn=Ω(f(n))f(n)=Ω(n2)n≠Ω(n2)Ω
— András Salamon

4

Dzięki definicji Knutha możesz twierdzić tylko . Jak widać, nie jest to intuicyjne i zdarza się, że funkcje Vitányi i Meertens nazywają „dzikimi”. Proponują zdefiniowanief(n)∈Ω(n)

Ω(f(n))={g∣∃δ>0:∀n0>0:∃n>n0:g(n)≥δf(n)}.

(Jest to to samo, co definicja Lance'a). Przy tej definicji .f(n)∈Ω(n2)


2

Nie wiem o najczęściej używanych, ale wydaje mi się, że znam najstarsze użycie (w każdym razie do informatyki).

W artykule Hartmanisa i Stearnsa z 1965 r. „O złożoności obliczeniowej algorytmów” następstwem 2.1 jest:

Jeśli i są funkcjami czasowymi takimi, że toUTinfn→∞T(n)U(n)≥0SU⊆ST

gdzie jest klasą złożoności wszystkich problemów obliczalnych w . T (n) musi być zgodny z dla jakiejś liczby całkowitej oraz wszystkich i , ale nie musi być konstruowany w czasie.SKO(K(n))T(n)≥n/kknT(n)≤T(n+1)

Twoja funkcja przestrzega pierwszej reguły dla ale nie przestrzega drugiej reguły.k=1

Następstwem 2.2 jest wzajemność powyższego i wykorzystuje limit supremum, ale nadal ma te wymagania. Wydaje mi się, że z biegiem lat algorytmy stawały się coraz bardziej złożone, możliwe jest, że wymagania zostały złagodzone.


2

Myślę, że powinniśmy rozróżnić dwie rzeczy:

  • dolne ograniczenie dla funkcji
  • dolna granica problemu (algorytm)

W przypadku funkcji, gdy ustalamy porządek, wynika z niego definicja dolnego / górnego ograniczenia . Jeśli relacją rzędu jest asymptotyczna dominacja (ignorowanie stałych czynników)

f⪯g:∃c,n∀m>n. f(x)≤cg(x)

wtedy definicja jest zwykłą definicją i . Oba są szeroko stosowane w innych obszarach, takich jak kombinatoryka.ΩOΩ

Ale kiedy mówimy o dolnej granicy dla problemu (algorytmu), tak naprawdę chcemy powiedzieć, że problem wymaga pewnej ilości zasobów (do uruchomienia algorytmu rozwiązującego problem). Często klasy złożoności są parametryzowane przez funkcje takie jak , a my po prostu mówimy, że problem jest ograniczony przez funkcję, ale działa to tylko dla ładnych funkcji (np. Czas działania algorytmu jest monotoniczny itp.). Co chcemy powiedzieć w tych przypadkach jest to, że musimy czas pracy, aby rozwiązać problem, czyli mniej niż Czas pracy nie jest wystarczające, który formalnie staje definicję Lance, że czas działania algorytmu nie jest w .n 2 n 2 o ( t ( n ) )Time(t(n))n2n2o(t(n))

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.