Prosty i praktyczny algorytm deterministyczny, skomplikowany czas działania


18

Bardzo często, jeśli czas działania algorytmu jest skomplikowanym wyrażeniem, sam algorytm jest również skomplikowany i niepraktyczny. Każdy z pierwiastek sześcienny i czynników w czasie biegu asymptotycznej tendencję, aby dodać złożoności algorytmu, a także ukryte czynniki stałe do czasu pracy.loglogn

Czy mamy uderzające przykłady, w których zawodzi ta praktyczna zasada?

Oczywiście łatwo jest znaleźć przykłady algorytmów, które są bardzo trudne do wdrożenia, nawet jeśli mają bardzo prosty najgorszy czas działania. A co z rozmową?

Czy mamy przykłady bardzo prostych i praktycznych deterministycznych algorytmów, które są łatwe do wdrożenia, ale zdarzają się bardzo skomplikowane wyrażenia jako najgorszy przypadek asymptotycznego czasu działania?

Zwróć uwagę na słowa kluczowe „deterministyczny” i „najgorszy przypadek”; analiza prostych randomizowanych algorytmów dość łatwo prowadzi do skomplikowanych wyrażeń.

Oczywiście to, co „skomplikowane”, jest kwestią gustu. W każdym razie wolałbym, aby wyrażenie było zbyt brzydkie, aby umieścić je w tytule twojego artykułu. Wolałbym skomplikowaną funkcję jednego naturalnego parametru (wielkość wejściowa, liczba węzłów itp.).


PS. Myślałem, że nie uczynię tego „pytaniem z dużej listy”, a nie CW. Chciałbym znaleźć jeden doskonały przykład (jeśli w ogóle istnieje). Dlatego proszę zamieścić inną odpowiedź tylko wtedy, gdy uważasz, że jest ona „lepsza” niż jakakolwiek z dotychczasowych odpowiedzi.


2
Czy algorytm testowania pierwotności AKS kwalifikuje się jako odpowiedź? Waham się, ponieważ „komplikacja” jego przebiegu jest w pewnym sensie wynikiem pseudolosowości rozkładu liczb pierwszych ...
arnab

Mam wrażenie, że najgorszym przypadkiem jest w większości przypadków coś, co powoduje „bieganie po wszystkim” i wszystko jest tym, w czym mierzymy środowisko uruchomieniowe. Naturalnie, proste algorytmy mają łatwe środowiska wykonawcze WC. Skomplikowane środowiska wykonawcze pojawiają się, gdy próbujemy zgolić odrobinę przy pomocy jakiegoś triku. Ale twoje pytanie jest interesujące; Z pewnością jestem ciekawa, czy moje uczucie jest słuszne.
Raphael

@arnab: Dzięki, AKS to dobry pomysł. Ale nie jestem pewien, czy możemy to nazwać „praktycznym”?
Jukka Suomela

Czy schematy przekazywania wiadomości, takie jak propagacja ankiety, propagacja ograniczeń lub sekwencyjne TRW, są liczone jako „algorytmy”? Łatwy do wdrożenia, czas działania jest trudny do przewidzenia
Jarosław Bułatow

Ups, zawsze podoba mi się metoda rho Pollarda, jest prosta i praktyczna, a analiza jest naprawdę trudna, ale losowość algorytmu czyni go niekwalifikowanym jako odpowiedź na post ...
Hsien-Chih Chang 張顯 之

Odpowiedzi:


20

Najlepszym przykładem, jaki mogę wymyślić, jest algorytm (opisany poniżej) do obliczenia poziomu w układzie n linii w płaszczyźnie, tj. Linii wielokątnej utworzonej przez punkty, które mają dokładnie k linii w pionie nad nią. To nie jest najbardziej wydajny algorytm znany z problemu. Istnieją wydajniejsze algorytmy o prostszych złożonościach, ale uważam, że ten jest bardziej praktyczny niż większość (jeśli nie wszystkie) z nich. Analiza prawdopodobnie nie jest ścisła, ponieważ wykorzystuje złożoność poziomu K , która jest znanym otwartym problemem (myślę, że wszystkie inne terminy w analizie są ścisłe). Mimo to wątpię, czy poprawione granice dla poziomu k- poziom znacznie uprościłyby czas działania. Zakładam, że k =knkkk aby zapisać złożoność jako funkcjęsamego n .k=n/2n

Algorytm oparty jest na paradygmacie przemiatania linii i wykorzystuje dwa -aryjne turnieje kinetyczne jako kinetyczne kolejki priorytetowe. Wstawienia i usunięcia są wykonywane, gdy linia przechodzi powyżej lub poniżej poziomu k , przenosząc linię z jednego turnieju kinetycznego do drugiego. W związku z tym, istnieje O ( N 4 / 3 ), insercje i delecje (przy użyciu granicę dla Dey w k -level złożoność). Każde zdarzenie jest przetwarzane w O ( log n ) czasu i istnieją O ( N 4 / 3 α ( n(logn)kO(n4/3)kO(logn) zdarzenia ( α ( n ) pochodzi ze złożoności górnej obwiedni układów segmentów linii, podczas gdy log n / log log n pochodzi z wysokościdrzewa ( log n ) -ary ). Całkowity czas działania wynosiO(n4/3α(n)logn/loglogn)α(n)logn/loglogn(logn)

O(n4/3α(n)log2n/loglogn).

Sprawdź manuskrypt Timothy Chana http://www.cs.uwaterloo.ca/~tmchan/lev2d_7_7_99.ps.gz, aby uzyskać więcej informacji i odniesień. Współczynnik można usunąć za pomocą binarnego (intead ( log n ) -ary) turnieju kinetycznego, ale w rzeczywistości przyspiesza on kolejkę priorytetów kinetycznych w testach, które przeprowadziłem. Złożoność powinna stać się nieco brzydsza i gorsza (podczas gdy algorytm nadal będzie praktyczny), jeśli zamiast turnieju kinetycznego zostanie użyta kupka kinetyczna ( powinien pojawić się dziennik wewnątrz pierwiastka kwadratowego).1/loglogn(logn)log


Doskonały przykład, dzięki! To nie będzie łatwe do pokonania. :)
Jukka Suomela

1
Algorytm ten jest w praktyce wolniejszy niż algorytmy randomizowane, które są dość łatwe do wdrożenia (jak ktoś, kto zaimplementował jeden z tych algorytmów (patrz mój artykuł „Spacerując w układzie planarnym”.)
Sariel Har-Peled,

Przyjąłem tę odpowiedź, ponieważ wydaje się ona być najbliższa temu, co miałem na myśli. Ale jeśli ktoś ma jakieś świeże pomysły, chętnie to usłyszę!
Jukka Suomela

24

Operacje struktury danych znajdowania związku wydają się spełniać twoje kryteria:

http://en.wikipedia.org/wiki/Disjoint-set_data_structure


2
Rzeczywiście, opublikowałem tę samą odpowiedź, ale usunąłem ją, gdy zauważyłem, że mnie pobiłaś. :) Prosty i elegancki algorytm, który może nie-teoretyk mógłby nawet odkryć, ale odwrotność Ackermanna amortyzowała złożoność.
Warren Schudy,

Cóż, czas nie wygląda, że "skomplikowane", jeśli porównać go do O ( n 4 / 3 α ( n ) log 2 n / log log n ) w odpowiedzi Guilherme za. :)O(α(n))O(n4/3)α(n)log2)n/loglogn)
Jukka Suomela

Stosunek długości algorytmu do złożoności dowodu dla znalezienia związku jest prawdopodobnie nie do pobicia - wszystkie trzy operacje są, dziewięć linii kodu?
Neel Krishnaswami,

1
Nie sądzę, aby pytanie dotyczyło prostego i praktycznego algorytmu ze złożoną analizą . Myślę, że pytanie dotyczy prostego i praktycznego algorytmu o złożonym czasie działania , to znaczy rzeczywistego wyrażenia uzyskanego dla górnej granicy.
Guilherme D. da Fonseca

6

Algorytm simpleksowy. Łatwy do wdrożenia i działa doskonale w praktyce, ale jest bałagan do analizy teoretycznej.


n

w rzeczywistości wiadomo, że simplex zajmuje najgorszy czas w najgorszym przypadku dzięki konstrukcji Klee-Minty. Myślę, że nie jest to przykład tego, o co pyta Jukka
Suresh Venkat,

1
Może powinienem był powiedzieć metodę simpleks zamiast algorytmu simpleks. Kostka Klee-Minty i jej odmiany działają w przypadku niektórych zasad obracania wanilii. Ale na przykład reguła losowego obracania aspektu ma szaloną górną i (ostatnią) dolną granicę. Gil Kalai miał fajny wpis na blogu na temat ostatnich wyników. gilkalai.wordpress.com/2010/11/09/…
Mohit Singh

dobra uwaga, Mohit. Byłem również zdezorientowany.
Suresh Venkat

2

Nie jestem pewien, czy uważasz to za „praktyczne”, ale jest to znany otwarty problem. Paul Erdos powiedział o przypuszczeniu Collatza: „Matematyka nie jest jeszcze gotowa na takie problemy”

x=1


A jaki problem rozwiązuje ten algorytm ...?
Jukka Suomela

Sugeruje to poszukiwanie nowych technik analizy w czasie wykonywania.
Mohammad Al-Turkistany

2
można wtedy powiedzieć, że brutalne poszukiwanie dowodu hipotezy Collatza również motywuje „nowatorskie techniki analizy w czasie wykonywania”; w obu przypadkach algorytm bezmyślnie bada digrafa. Hipoteza Collatza jest fajna, ale nie sądzę, że jest to interesujący przykład „algorytmu”.
Niel de Beaudrap,

2

Ten przykład, mimo że nie spełnia listu twojej prośby, może być interesujący, ponieważ zawiera pewne duchowe powinowactwo. W szczególności kwestia sortowania stosów naleśników i przypalonych naleśników według zamiany.

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

Jednym z obszarów zastosowania jest biologia obliczeniowa (genetyka), w której można postawić pytania dotyczące przestawienia genomu pod względem odległości między permutacjami przy użyciu odwrócenia części permutacji podlegających różnym regułom.

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.