Możemy absolutnie udowodnić takie rzeczy.
Wiele problemów ma trywialne dolne granice, takie jak znalezienie minimum zbioru liczb (które nie są w żaden sposób posortowane / ustrukturyzowane) zajmuje co najmniej Ω ( n ) czasu. Dowód na to jest prosty: hipotetyczny algorytm działający w czasie o ( n ) nie może zbadać wszystkich liczb na wejściu. Gdybyśmy uruchomili algorytm na niektórych danych wejściowych, moglibyśmy zaobserwować, że nigdy nie sprawdzał określonego elementu danych wejściowych. Zmieniając ten element na minimum, możemy doprowadzić algorytm do awarii.nΩ(n)o(n)
Mniej trywialna dolna granica to dolna granica do sortowania w modelu porównawczym. Dowód tego jest następujący: biorąc pod uwagę liczbę n liczb, istnieje n ! możliwe wyniki (wejście może być dowolną permutacją posortowanej listy, więc wyjście może być dowolną permutacją wejścia). Jeśli ograniczamy się tylko do porównywania, wówczas nasz algorytm (średnio) musi wykonać co najmniej log 2 ( n ! ) = Ω ( n log n ) porównań, aby móc podać nΩ(nlogn)nn!log2(n!)=Ω(nlogn)różne wyjścia.n!
Dolne granice mogą być jeszcze silniejsze. Istnieje kilka problemów (zwłaszcza problemy twarde ), dla których występuje wykładnicza dolna granica. Problemy w tej klasie obejmują obliczanie optymalnych strategii dla gier takich jak (uogólnione) szachy, warcaby i gra. Dowodem na to jest twierdzenie o hierarchii czasu , które stwierdza (z zastrzeżeniem pewnych ograniczeń f ):EXPTIMEf
Biorąc pod uwagę funkcję , istnieje problem obliczeniowy, który można rozwiązać w czasie O ( f ( n ) ), ale nie można go rozwiązać w czasie o ( f ( n )fO(f(n)).o(f(n)logn)
Zasadniczo, jeśli możesz pomyśleć o funkcji , istnieje problem, który wymaga tyle czasu do rozwiązania.f
Wreszcie, inną drogą niekoniecznie udowodnienia dolnej granicy czasu, ale coś jeszcze silniejszego pokazuje nierozstrzygalność problemu (np. Zatrzymanie, korespondencja pocztowa).
Tom van der Zanden
źródło
Tak, to możliwe. Klasycznym przykładem jest fakt, że dowolny algorytm sortowania oparty na porównaniu wymaga porównań do posortowania listy długości n .Ω ( n logn ) n
Jednak dolne granice wydają się być znacznie trudniejsze do udowodnienia niż górne granice. Aby udowodnić, że istnieje algorytm sortowania, który wymaga porównań , wystarczy wykazać taki algorytm (scal sort - voila !). Ale dla dolnej granicy musisz jakoś pokazać, że żaden algorytm w danej klasie nie może rozwiązać twojego problemu. Trudność zrobienia tego ilustruje fakt, że wiemy tylko, że L ⊆ N L ⊆ P ⊆ N P ⊆ P S P A C EO ( n logn )
chociaż wiemy, że co najmniej jedno z tych wtrąceń jest ścisłe ( L ⊂ P S P A C E według twierdzenia o hierarchii przestrzeni) i większość ludzi uważa, żewszystkiesąścisłe.
Z drugiej strony, Ryan Williams ma fajny artykuł (i rozmowę, który słyszałem kilka razy) o nazwie Algorytmy dla obwodów i obwody dla algorytmów , w którym twierdzi, że znalezienie dolnych granic i znalezienie algorytmów nie jest zasadniczo wszystkim to inaczej. Na przykład przytacza dowód nierozstrzygalności problemu zatrzymania jako przykład algorytmu (uniwersalnej maszyny Turinga) używanego właśnie do udowodnienia dolnej granicy (nierozstrzygalność).
źródło
Jest jednak punkt w pytaniu, który wymaga kilku dodatkowych uwag dotyczących dolnej granicy (lub ogólnie granic złożoności).
W rzeczywistości wybór jednego kroku obliczeniowego jest nieistotny, o ile można uznać, że kroki obliczeniowe mają stałą górną granicę (i dolną granicę). Wynik złożoności będzie taki sam, ponieważ jest zdefiniowany do stałej. Przyjmowanie 3 porównań jako operacji jednostkowych lub tylko jednej nie ma znaczenia.
To samo dotyczy wielkości danych, która służy jako odniesienie do oceny kosztów obliczeń. Biorąc jedną liczbę całkowitą lub dwie liczby całkowite jako jednostkę wielkości nie ma znaczenia.
Jednak te dwie opcje muszą być powiązane.
To, czy operację można uznać za koszt jednostkowy, jest ściśle związane z tym, jakie dane można uznać za posiadające rozmiar jednostki. I to zależy od tego, jaki poziom abstrakcji wybierzesz dla swojego modelu obliczeniowego.
źródło