Co to jest wydajny algorytm?

10

Z punktu widzenia zachowania asymptotycznego, co jest uważane za „wydajny” algorytm? Jaki jest standard / powód rysowania linii w tym punkcie? Osobiście uważałbym, że wszystko, co naiwnie nazwałbym „sub-wielomianem”, takie jakf(n)=o(n2) Jak na przykład n1+ϵ byłby wydajny i wszystko, co jest Ω(n2)byłoby „nieefektywne”. Jednak słyszałem, że wszystko, co należy do dowolnego wielomianu, można nazwać wydajnym. Jakie jest uzasadnienie?

Robert S. Barnes
źródło

Odpowiedzi:

11

To zależy od kontekstu. W informatyce teoretycznej zazwyczaj każdy algorytm wielomianu czasowego jest uważany za „wydajny”. W algorytmach aproksymacyjnych na przykład czas działanian1/ϵ1/ϵ byłby uważany za wydajny, nawet jeśli nie będzie w praktyce przydatny dla żadnej rozsądnej wartości ϵ. Algorytm dla SAT, który działan2100 byłby niesamowitym przełomem.

W klasycznych algorytmach, tj. Algorytmach z lat 80. i wcześniejszych, środowiska wykonawcze poniżej n3lub mniej więcej (pomyśl mnożenie macierzy, minimalne dopasowanie kosztów, przepływy, programowanie liniowe) są uważane za wydajne. Powiedziałbym, że nadal są one uważane za skuteczne przez większość ludzi. Oczywiście an2 algorytm nie jest uważany za wydajny, jeśli: nlogn algorytm jest znany, na przykład do sortowania.

Obecnie istnieje trend w kierunku algorytmów podliniowych lub algorytmów przesyłania strumieniowego, które są w stanie poradzić sobie z terabajtami danych. Spróbuj użyć mnożenia macierzy, aby obliczyć ranking stron wszystkich stron w indeksie Google. To nie zadziała.

Oczywiście, choć zdecydowanie użyteczne, asymptotyczne środowisko uruchomieniowe algorytmu nie opowiada całej historii. Istnieją algorytmy z dobrym asymptotycznym środowiskiem uruchomieniowym, ale stałe, które są tak ogromne, że nie można ich skutecznie użyć. Zawsze. Lipton nazywa je Algorytmami Galaktycznymi . Robert Sedgewick twierdzi nawet, że granice najgorszych przypadków są „często bezużyteczne do przewidywania, często bezużyteczne dla gwarancji”, a „analiza najgorszych przypadków jest bezużyteczna do przewidywania wyników” w swoim przemówieniu „Powrót nauki do informatyki” .

adrianN
źródło
9
W skrócie: efektywność rozwiązuje Twój problem w odpowiednim czasie.
Raphael
To naprawdę nie wymaga własnej odpowiedzi, ale BPP, która jest klasą funkcji z wielomianowym środowiskiem wykonawczym (jak opisano w odpowiedzi) z losowością, jest często uważana za wydajną. Innymi słowy, powyższe jest słuszne, ale komputery zazwyczaj mają dostęp do losowości w celu wykonania obliczeń. Jednym z najważniejszych praktycznych zastosowań losowości jest mieszanie.
SamM
Może „efektywność” nie jest właściwie właściwą terminologią? Właśnie przeglądałem jedną z moich książek o rachunku różniczkowym, a autor nazywa środowiska uruchomieniowe wielomianowe „wykonalne”, a środowiska wykonawcze „trudne”.
Robert S. Barnes,
1
@ RobertS.Barnes: Różne słowa, ten sam problem.
Raphael
4

Moje 2 centy z punktu widzenia algorytmów rozproszonych: patrząc na sieci wielkoskalowe (P2P, sieci społecznościowe itp.) Algorytm rozproszony jest uważany za wydajny, jeśli jego czas działania wynosiO(logcn) dla jakiejś stałej c>0 a algorytm wykorzystuje wiadomości zO(logn)bitów Należy zauważyć, że wymaganie dotyczące rozmiarów wiadomości jest zwykle przypisywane nawet większemu znaczeniu niż czas działania, w szczególności w przypadku problemów „globalnych”, które mają większą dolną granicę czasu działania, np. Rozproszony MST.

Piotr
źródło
3

Powodem jest to, że z perspektywy zachowania asymptotycznego wielomianowe tempo wzrostu jest trywialnie niższe niż wielobiegunowe tempo wzrostu. W praktyce algorytm czasu wielomianowego działa znacznie szybciej niż super-wielomianowy algorytm czasu, gdy rośnie wielkość wejściowa.

Oczywiście nikt nie powiedziałby, że algorytm o złożoności wielomianowej, na przykład, O(n2000) jest „wydajny”, ale większość algorytmów rzadko przekracza złożoność O(n5).

Praktyczne względy mogą nawet doprowadzić cię do tego O(n2)jest nieefektywny w przetwarzaniu bardzo dużych danych wejściowych, dlatego staramy się udowodnić dolne granice i zaprojektować sekwencyjne algorytmy pasujące do tych dolnych granic z jednej strony, a następnie zastosować algorytmy równoległe z drugiej strony. W przypadku niektórych problemów, jeśli jesteś skłonny zaakceptować gwarancję probabilistyczną, możesz nawet skorzystać z sublinearnych algorytmów czasu (bardzo szybki, ale może nie dostarczyć poprawnej odpowiedzi z bardzo małym prawdopodobieństwem).

Massimo Cafaro
źródło
3

Teoretycznie uważa się, że algorytm jest wydajny, jeśli jego najgorszy czas działania jest ograniczony wielomianem na długości wejściowej. Powodem jest to, że wielomiany mają ładne właściwości zamykania. Dodawanie, mnożenie, komponowanie wielomianów to operacje, które dają wielomiany, i są one dobre, jeśli redukujesz problemy do siebie.

Oczywiście różnica między wielomianem a wykładnikiem staje się bardzo duża, ponieważ długość wejściowa rośnie, więc algorytmy czasu wielomianowego są znacznie lepsze. W praktyce algorytm wielomianowy może zająć dużo czasu przed zakończeniem, ale może się zdarzyć, że jest to algorytm optymalny (najlepszy z możliwych), w którym to przypadku powiedziałbym, że jest wydajny.

saadtaame
źródło
Chociaż rozumiem, że jeśli coś jest najszybszym znanym algorytmem dla konkretnego problemu, można by go uznać za „wydajny” z tego punktu widzenia, trudno mi myśleć o czymkolwiek, co działa w czasie rzeczywistym jako wydajnym. :-)
Robert S. Barnes
W przypadku środowisk wielomianowych „efektywny” to tylko słowo, które wprowadza w błąd.
Raphael
@Raphael Może tractable to lepsze słowo do użycia ...?
Robert S. Barnes
1
@ RobertS.Barnes: Niewiele lepiej, imho. „Tractable” jest tak samo względny jak „wydajny”.
Raphael
0

Niektóre problemy są łatwe, inne trudne. To, czy algorytm jest „wydajny”, zależy od tego, jak dobry jest w porównaniu z wrodzoną złożonością problemu. Jeśli znajdziesz algorytm uwzględniający dowolną liczbę n cyfr w O (n3) i znajduję algorytm sortujący n liczb w O (n2), wtedy twój algorytm jest bardziej wydajny (ponieważ pokonuje wszystko, co znane ludzkości przez ogromny czynnik, podczas gdy mój jest tak wolny, jak można oczekiwać od absolutnego początkującego).

gnasher729
źródło
Interesujący punkt widzenia, chociaż się nie zgadzam. Jakkolwiek chceszΘ-s tam.
Raphael