k = √
- Baby-Step-Riesenschritt-Algorithmus zur Berechnung des diskreten Logarithmus in ,
- statische orthogonale 2D-Bereichszählung in -Zeit und -Speicher,O(n)
- Prioritätswarteschlange mit EXTRACT-MIN in und DECREASE-KEY in ,O(1)
- Färben eines 3-farbigen Graphen mit Farben in Polynomzeit,
nur um ein paar zu nennen.
Obwohl solche Algorithmen oft nicht optimal sind, sind sie für die Schüler leicht zu verstehen und zeigen schnell, dass naive Grenzen nicht optimal sind. Auch sind Quadratwurzel-Ideendatenstrukturen aufgrund der Cache-Freundlichkeit (ohne Berücksichtigung von Cache-vergessenden Techniken) manchmal praktischer als ihre Gegenstücke auf der Basis von Binärbäumen. Deshalb widme ich diesem Thema während des Unterrichts ein gutes Stück Aufmerksamkeit.
Ich interessiere mich für weitere Beispiele dieser Art. Daher suche ich nach (vorzugsweise eleganten) Algorithmen, Datenstrukturen, Kommunikationsprotokollen usw., deren Analyse auf der Quadratwurzel-Idee beruht. Ihre Asymptotik muss nicht optimal sein.
ds.algorithms
ds.data-structures
big-list
teaching
Dmytro Korduban
quelle
quelle
Antworten:
Chazelle, Liu und Magens Arbeit Sublinear Geometric Algorithms (STOC 2003, SICOMP 2006) hat mehrere clevere Anwendungen des folgenden Stichprobentricks. Variationen desselben Tricks wurden zuvor von Gärtner und Welzl [ DCG 2001 ] verwendet, die die erste Ausgabe von CLR (1990) zitierten.
Angenommen, wir erhalten eine sortierte, zirkulär verknüpfte Liste von Zahlen, die in einem zusammenhängenden Speicherblock gespeichert sind. Das heißt, wir haben zwei Arrays und , wobeiN e x t [ 1 .. n ]Ke y[ 1 .. n ] Ne x t [ 1 .. n ]
Dann können wir den Nachfolger einer gegebenen Zahl in erwarteter Zeit wie folgt finden:O ( √x O ( n--√)
Wählen Sie eine zufällige Stichprobe von Elementen des Array- . Es sei das größte Sample, das kleiner als (oder das größte Sample, wenn alle Samples größer als ). KeyKey[j]xxn--√ Ke y Ke y[ j ] x x
Folgen Sie den Zeigern von bis eine Zahl größer oder gleich angezeigt wird (nach dem Umbrechen, wenn alle Samples größer als ).K e y [ j ] x xNe x t Ke y[ j ] x x
Eine relativ einfache Anwendung von Yaos Lemma impliziert, dass die erwartete optimal ist. Jeder deterministische Algorithmus für dieses Problem benötigt im schlimmsten Fall -Zeit.Ω(n)O ( n--√) Ω ( n )
quelle
Es gibt Dreiecke in jedem Eck-Graphen und diese können in werden. Es gibt viele Möglichkeiten, dies zu tun, aber ich denke, eine der frühesten ist Itai und Rodeh (STOC 1977) , die einen Algorithmus bereitstellen, der eine Folge von Iterationen in linearer Zeit durchläuft, von denen jede einen übergreifenden Wald aus dem Diagramm entfernt. In den frühen Iterationen, in denen die verbleibende mindestens Komponenten enthält, entfernt der Algorithmus mindestens Kanten pro Schritt, und in den späten Iterationen, in denen höchstens Komponenten enthalten sind, ist der maximale Grad und schrumpft jeweils um mindestens eine Schritt. Die Gesamtzahl der Iterationen beträgt also höchstensm O ( m 3 / 2 ) n - k k n - k k m / k + k O ( √O(m3/2) m O(m3/2) n−k k n−k k m/k+k und Auswahl des richtigen Kompromisses ergeben die Gesamtgrenze von für Iterationen und für die Zeit.O(m 3 / 2 )O(m−−√) O(m3/2)
quelle