Czy jest jakiś inny algorytm, którego najgorszy czas działania jest wykładniczy, podczas gdy działa on bardzo dobrze w praktyce, inny niż algorytm Simplex?

9

Na ogół algorytm nazywamy „dobrym algorytmem”, jeśli jego czas działania jest w najgorszym przypadku wielomianowy. Ale w niektórych przypadkach (na przykład algorytm Simplex), chociaż najgorszy przypadek algorytmu ma charakter wykładniczy, może on działać bardzo dobrze w praktyce.

Czy są jakieś (deterministyczne) przykłady tej sytuacji inne niż algorytm Simplex?

Arman
źródło
1
Być może zainteresuje Cię powiązane pytanie: cstheory.stackexchange.com/questions/305/…
Radu GRIGore

Odpowiedzi:

13

Współczesne algorytmy rozwiązywania SAT są w stanie dość szybko rozwiązać większość przypadków, nawet jeśli najgorszy przypadek jest oczywiście wykładniczy. W tym przypadku jednak praktyczna szybkość jest raczej wynikiem wielu lat inżynierii algorytmów, a nie pojedynczego eleganckiego algorytmu. Chociaż zrozumiałem, że uczenie się klauzul sterowanych konfliktami spowodowało znaczny skok w wydajności solverów SAT, późniejsze ulepszenia są często osiągane przez sprytne wykorzystanie różnych heurystyk w algorytmach.

Janne H. Korhonen
źródło
13

The k-Oznacza, że ​​algorytm grupowania jest wykładniczy nawet w samolocie, ale działa bardzo dobrze w praktyce.

Suresh Venkat
źródło
13

Wnioskowanie o typie Hindleya-Milnera jest zakończone WYŁĄCZNIE, ale w programach, które ludzie zwykle piszą, jest to prawie liniowe.

Neel Krishnaswami
źródło
1
Czy to nie jest trochę inne? Przypominam sobie, że moglibyśmy scharakteryzować warunek konieczny dla złej wydajności Hindley-Milnera (głęboko zagnieżdżone let), dlatego HM jest dobry w praktyce, ponieważ zagnieżdżanie jest w praktyce ograniczone dość nisko (zwykle w miarę wchodzenia wcina się więcej głębiej puszczaj wiązania i denerwuj się, gdy zmierzamy w kierunku skrajnej prawej krawędzi ekranu ...) To prawda, wcześniej zgłosiłem to z pamięci i ostatnio nie byłem w stanie odzyskać referencji.
Rob Simmons,
2
Nie, to nie jest konieczny warunek. Możesz podać sekwencję powiązań let (bez zagnieżdżania!) Tak, aby wyrównywała rozmiar wywnioskowanego typu przy każdym dodatkowym wpisie w sekwencji. Przykład: patrz cstheory.stackexchange.com/questions/2428/ ...
Neel Krishnaswami,
Przykład znajduje się w SML i jestem bardziej zaznajomiony ze sposobem robienia rzeczy przez OCaml, ale jeśli ta sekwencja powiązań byłaby „let”, to myślę, że byłyby zagnieżdżone. Tylko dlatego, że definiują funkcje globalne, którymi nie są, ale odbywa się tutaj ukryte zagnieżdżenie: Dana definicja ma dostęp do wszystkich definicji powyżej i żadnej z poniższych.
amnn
1
@amnn: Zagnieżdżanie, o którym mowa, to zagnieżdżanie pozwala na związanie formy - tj. let z = (let y = e in e') in e''w przeciwieństwie do niż let y = e in let z = e' in e''.
Neel Krishnaswami
9

Program nauty Brendana McKaya (No AUTomorphisms, Yes?) Rozwiązuje kanoniczny problem znakowania grafów (jednocześnie rozwiązując problemy z Graph Isomorphism i Graph Automorphism) i ma wykładniczą wydajność w najgorszym przypadku (Miyazaki, 1996). Działa jednak bardzo szybko w przypadku większości wykresów, szczególnie tych z kilkoma automorfizmami.

W szczególności algorytm rozpoczyna się od podzielenia wierzchołków według stopnia, a następnie stopnia między każdą częścią. Gdy proces ten się ustabilizuje, należy dokonać wyboru, aby rozróżnić wierzchołek w części niebanalnej, a to prowadzi do zachowania wykładniczego. Na większości wykresów głębokość tej procedury rozgałęziania jest niewielka.

Derrick Stolee
źródło
Myślałem, że nauty również użyły losowości, aby pomóc w wyrafinowaniu? W takim przypadku może to być bardzo analogiczne do algorytmu simpleks (chociaż oczywiście nie ma pojęcia wygładzonej analizy dla izomorfizmu grafowego).
Joshua Grochow
1
Nie używa losowości, ponieważ musi tworzyć spójne kanoniczne etykietowanie. Może jednak użyć niestandardowej procedury niezmienników wierzchołków, aby pomóc w podziale wierzchołków. Czasami ten niezmiennik wygląda losowo, jak został wyprodukowany (często jest to skomplikowana funkcja w sekwencjach stopnia odległości), ale to po prostu w celu zmniejszenia kolizji.
Derrick Stolee,
1
Ten niezmiennik wierzchołków można porównać do reguł przeciwdziałania cyklom algorytmu simpleks.
Derrick Stolee,
4

Kilka algorytmów dla prostych gier stochastycznych działa dobrze w praktyce, mimo że mają one wykładniczo najgorsze czasy działania. Oczywiście problem ten jest w pewnym sensie związany z programowaniem liniowym, chociaż nie wiadomo, że występuje w czasie wielomianowym.

Peter Shor
źródło
1

Istnieje algorytm znajdowania mieszanych równowag Nasha, podobny do algorytmu simpleksowego dla płyt LP. (Zapominam nazwę.) Ma wykładniczą najgorszą złożoność, ale mam niejasne wspomnienie, że często zachowuje się dobrze w praktyce.

Warren Schudy
źródło
Masz na myśli algorytm Lemke-Howsona?
Rahul Savani
1

Pakowanie pojemników (wiele wariantów) to problem, którego złożoność jest trudna do NP:

http://en.wikipedia.org/wiki/Bin_packing_problem

Jednak wiele heurystyk przy zastosowaniu do „praktycznych” wersji ma się bardzo dobrze. Do jednowymiarowego pakowania bin niektóre z tych heurystyk, na przykład pierwsze dopasowanie; pierwsze dopasowanie maleje; Najlepsze dopasowanie; zmniejszanie najlepszego dopasowania jest bardzo atrakcyjne jako temat do pokazania uczniom. Studenci często mogą odkryć niektóre podstawowe heurystyki dla siebie.

Joseph Malkevitch
źródło
Istnieje wiele przykładów, nawet jeśli problem jest NP-zupełny, poradzą sobie z nim proste algorytmy, szczególnie algorytmy aproksymacyjne. Ale tak naprawdę szukam algorytmów wykładniczych, twój przykład dotyczy trudnego problemu, który można łatwo rozwiązać za pomocą prostych algorytmów. Być może istnieje wykładniczy algorytm czasowy, który dokładnie rozwiązuje pakowanie pojemników (lub inny problem); a w praktyce zajmuje to czas wielomianowy.
Arman,
0

Algorytm trwałości (pochodzący z Edelsbrunner-Letscher-Zomorodian, z dużą ilością odmian od tego czasu) jest najgorszym przypadkiem sześciennym, ale wydaje się, że z eksperymentów zwykle działa w czasie liniowym.


źródło