From: Martin Mares Date: Tue, 16 Jan 2007 11:50:46 +0000 (+0100) Subject: Posledni kousky Q-Heapu a jejich aplikace na kostry. X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=78739da741599eb08d23c36bac8d42a90c99ed27;p=ga.git Posledni kousky Q-Heapu a jejich aplikace na kostry. --- diff --git a/8-qheap/8-qheap.tex b/8-qheap/8-qheap.tex index e74002a..8d62eb0 100644 --- a/8-qheap/8-qheap.tex +++ b/8-qheap/8-qheap.tex @@ -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