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.
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.
źródło
Odpowiedzi:
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 =k n k k k aby zapisać złożoność jako funkcjęsamego n .k=n/2 n
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) k O(n4/3) k O(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)
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
źródło
Operacje struktury danych znajdowania związku wydają się spełniać twoje kryteria:
http://en.wikipedia.org/wiki/Disjoint-set_data_structure
źródło
Algorytm simpleksowy. Łatwy do wdrożenia i działa doskonale w praktyce, ale jest bałagan do analizy teoretycznej.
źródło
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”
źródło
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.
źródło