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)

Wei Yu
źródło
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)n2k
kg(n)kn2
lim infg(n)n2k
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.

Lance Fortnow
źródło
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)

Marcus Ritt
źródło
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 toUTinfnT(n)U(n)0SUST

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.

chazisop
źródło
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)

fg:c,nm>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))

Kaveh
źródło