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?


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.


13

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


13

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


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.


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,


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.


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.


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.

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.