]> mj.ucw.cz Git - ga.git/commitdiff
Posledni kousky Q-Heapu a jejich aplikace na kostry.
authorMartin Mares <mj@ucw.cz>
Tue, 16 Jan 2007 11:50:46 +0000 (12:50 +0100)
committerMartin Mares <mj@ucw.cz>
Tue, 16 Jan 2007 11:50:46 +0000 (12:50 +0100)
8-qheap/8-qheap.tex

index e74002a56ed67a3a9c640e123bc4b6f09160a401..8d62eb076791d0b693870c3ea8221294e005b4f9 100644 (file)
@@ -205,11 +205,32 @@ po
 \:Pøepoèítáme $c_{i-1}$ a $c_i$ a upravíme $B$ a $C$ jako pøi Insertu.
 \endalgo
 
-\todo{Popsat, jak se poèítá $x[B]$.}
+\s{Èasová slo¾itost:} V¹echny kroky operací po~výpoètu ranku trvají konstantní èas, rank
+samotný zvládneme spoèítat v~$\O(1)$ pomocí tabulek, pokud známe $x[B]$. Zde je ov¹em
+nalíèen háèek -- tuto operaci nelze na~Word-RAMu konstantním poètem instrukcí spoèítat.
+Jak si pomù¾eme:
 
-\todo{Na $AC^0$-RAMu staèí $k=\O(w/\log w)$.}
+\itemize\ibull
+\:Vyu¾ijeme toho, ¾e operace $x[B]$ je v~${\rm AC}^0$ a vystaèíme si se strukturou pro ${\rm AC}^0$-RAM.
+Zde dokonce mù¾eme vytváøet haldy velikosti a¾ $w\log w$. Také pøi praktické implementaci mù¾eme vyu¾ít
+toho, ¾e souèasné procesory mají instrukce na~spoustu zajímavých ${\rm AC}^0$-operací, viz napø. pìkný
+rozbor v \cite{thorup:ac0}.
+\:Jeliko¾ $B$ se pøi jedné Q-Heapové operaci mìní pouze o~konstantní poèet prvkù, mù¾eme
+si udr¾ovat pomocné struktury, které budeme umìt pøi lokální zmìnì~$B$ v~lineárním èase
+pøepoèítat a pak pomocí nich indexovat. To pomocí Word-RAMu lze zaøídit, ale je to technicky
+dosti nároèné, tak¾e ètenáøe odkazujeme na~Fredmanùv a Willardùv èlánek \cite{fw90trans}.
+\endlist
+
+\h{Aplikace Q-Heapù}
 
-\todo{Aplikace na~kostry.}
+Jedním velice pìkným dùsledkem existence Q-Heapù je lineární algoritmus na~nalezení
+minimální kostry grafu ohodnoceného celými èísly. Získáme ho z~Fredmanovy a Tarjanovy
+varianty Jarníkova algoritmu (viz kapitoly o~kostrách) tak, ¾e v~první iteraci pou¾ijeme
+jako haldu Q-Heap velikosti $\log^{1/4} n$ a pak u¾ budeme pokraèovat s~Fibonacciho
+haldou. Tak provedeme tolik prùchodù, kolikrát je potøeba zlogaritmovat $n$,
+aby výsledek klesl pod~$\log^{1/4} n$, a~to je konstanta. V¹imnìte si, ¾e by nám
+dokonce staèila halda velikosti $\O(\log^{(k)} n)$ a~operacemi v~konstantím èase
+pro nìjaké libovolné~$k$.
 
 \references
 \bye