Godne uwagi przykłady idei pierwiastka kwadratowego w analizie złożoności

15

Istnieje wiele algorytmów i struktur danych, które wykorzystują ideę, że otrzymuje minimalną wartość przy k = \ sqrt n . Typowe przykłady to k = max{k,n/k}k=n

  • algorytm gigantycznego kroku dziecka do obliczania logarytmu dyskretnego w O(n) ,
  • statyczne zliczanie zakresu ortogonalnego 2D w czasie O(n) i pamięci O(n) ,
  • kolejka priorytetowa z EXTRACT-MIN w O(nk) i DECREASE-KEY w O(1) ,
  • kolorowanie trójkolorowego wykresu kolorami O(n) w czasie wielomianowym,

żeby wymienić tylko kilka.

Chociaż takie algorytmy często nie są optymalne, są łatwe do zrozumienia dla studentów i dobrze pokazują, że naiwne granice nie są optymalne. Ponadto struktury danych oparte na pierwiastkach kwadratowych są czasami bardziej praktyczne niż ich odpowiedniki oparte na drzewie binarnym ze względu na łatwość obsługi pamięci podręcznej (nie biorąc pod uwagę technik nieobsługujących pamięci podręcznej). Dlatego przykładam dużą wagę do tego tematu podczas nauczania.

Interesują mnie bardziej charakterystyczne przykłady tego rodzaju. Szukam więc (najlepiej eleganckich) algorytmów, struktur danych, protokołów komunikacyjnych itp., Których analiza opiera się na idei pierwiastka kwadratowego. Ich asymptotyki nie muszą być optymalne.

Dmytro Korduban
źródło
Przepraszam, jeśli pytanie jest nieco niejasne; poprawiaj się.
Dmytro Korduban
Czy to powinno być CW?
Suresh Venkat
2
@Suresh: Jeśli reguła „dużej listy ⇒ CW” nadal obowiązuje, to tak, powinna być CW.
Tsuyoshi Ito
2
Kolejnym dobrym przykładem jest szybkie dopasowanie w nieważonych grafach dwustronnych .
aelguindy
to podstawowa sztuczka zastosowana w najnowszych algorytmach zmniejszania map
Sasho Nikolov

Odpowiedzi:

10

Artykuł Chazelle, Liu i Magena Sublinear Geometric Al Algorytmy (STOC 2003, SICOMP 2006) ma kilka sprytnych zastosowań następującej sztuczki losowego próbkowania. Odmiany tej samej sztuczki były wcześniej używane przez Gärtnera i Welzla [ DCG 2001 ], którzy cytują pierwsze wydanie CLR (1990).

Załóżmy, że otrzymaliśmy posortowaną okrągłą listę liczb przechowywaną w ciągłym bloku pamięci. Oznacza to, że mamy dwie tablice i , gdzieN e x t [ 1 .. n ]Key[1..n]Next[1..n]

  • nKey[1..n] przechowuje zestaw liczb w dowolnej kolejności;n
  • Jeśli jest największą liczbą w zestawie, to jest najmniejszą liczbą w zestawie; w przeciwnym razie to najmniejsza liczba w zestawie, która jest większa niż .Key[i]Key[Next[i]]Key[Next[i]]Key[i]

Następnie możemy znaleźć następcę podanej liczby w oczekiwanym czasie w następujący sposób:xO(n)

  • Wybierz losową próbkę elementów tablicy . Niech będzie największą próbką, która jest mniejsza niż (lub największą próbką, jeśli wszystkie próbki są większe niż ).nKeyKey[j]xx

  • Postępuj zgodnie z wskaźnikami z aż zobaczymy liczbę większą lub równą (po zawinięciu, jeśli wszystkie próbki były większe niż ).NextKey[j]xx

Stosunkowo proste zastosowanie lematu Yao sugeruje, że oczekiwany czas jest optymalny. Każdy deterministyczny algorytm dla tego problemu wymaga czasu w najgorszym przypadku.O(n)Ω(n)

Jɛ ff E.
źródło
10

O(m3/2)mO(m3/2)nkknkkm/k+kO(m)O(m3/2)

David Eppstein
źródło