From: Martin Mares Date: Fri, 29 Dec 2006 20:52:35 +0000 (+0100) Subject: New. X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=b1443128a4f04187a0cbe0eb4e4630ec44913d5d;p=ga.git New. --- diff --git a/8-qheap/8-qheap.tex b/8-qheap/8-qheap.tex index c56b945..bf7e68b 100644 --- a/8-qheap/8-qheap.tex +++ b/8-qheap/8-qheap.tex @@ -1,6 +1,3 @@ -\def\X{{\cal X}} -\def\B{{\cal B}} -\def\and{\ \&\ } \def\msb{{\rm MSB}} \def\rank{{\rm Rank}} @@ -15,7 +12,7 @@ \prednaska{8}{Q-Heaps}{zapsal Cyril Strejc} V~minulé pøedná¹ce jsme mimo jiné ukázali výpoèetní model RAM a nahlédli jsme, -¾e pomocí RAMu mù¾eme celkem snadno (v konstatním èase) simulovat vektorový poèítaè. +¾e pomocí RAMu mù¾eme celkem snadno (v konstantním èase) simulovat vektorový poèítaè. Kdy¾ u¾ máme vektorový poèítaè, pojïme si ukázat, jaké datové struktury s~ním mù¾eme vytváøet. @@ -47,7 +44,7 @@ vektory ve $Bk=\O(w)$. Jeliko¾ strom má a¾~$B^h$ listù a nejvý¹e tolik vnitøních vrcholù, ukazatele zabírají $\O(h\log B)$ bitù, tak¾e pro vektory ukazatelù potøebujeme $Bh\log B=\O(w)$. Dobrá volba je napøíklad $B=k=\sqrt w$, $h=\O(1)$, èím¾ -získáme strukturu obsahující $w^{\O(1)}$ prvkù o~$\sqrt w$ bitech pracujicí +získáme strukturu obsahující $w^{\O(1)}$ prvkù o~$\sqrt w$ bitech pracující v~konstantním èase. \h{Q-Heap} @@ -86,7 +83,7 @@ si pamatovat minimum podstromu a Q-Heap s~hodnotami jeho syn ka¾dé vlo¾ení i odebrání prvku pøevést na~konstantnì mnoho operací s~Q-Heapy. \s{Náèrt} fungování Q-Heapu: -Nad~prvky $x_1,\ldots,x_r$ sestrojíme komprimovanou trii~$T$ (nevìtvicí se cesty +Nad~prvky $x_1,\ldots,x_r$ sestrojíme komprimovanou trii~$T$ (nevìtvící se cesty nahradíme hranami). Listy trie budou jednotlivá $x_i$, vnitøní vrchol, který le¾í mezi $x_i$ a $x_{i+1}$, bude testovat $c_i$-tý bit èísla. Pokud budeme hledat nìkteré z~$x_i$, tyto vnitøní vrcholy (budeme jim @@ -108,7 +105,7 @@ sou \:$\msb(x \oplus x_i)$ \endlist -\s{Dùkaz:} Pokud $x=x_i$, je zjevnì $\rank_\X(x) = i$. Pøedpokládejme tedy $x\ne x_i$. +\s{Dùkaz:} Pokud $x=x_i$, je zjevnì $\rank_X(x) = i$. Pøedpokládejme tedy $x\ne x_i$. Hodnoty znaèek klesají ve~smìru od koøene k~listùm a na cestì od koøene k~$x_i$ se v¹echny bity v $x_i$ na~pozicích urèených znaèkami shodují s bity v $x$, pøièem¾ a¾ do~pozice $c_i$ se shodují i bity znaèkami netestované. Sledujme tuto cestu @@ -120,9 +117,9 @@ je jedni jsou men¹í. \qed -\s{Pøíklad:} Vezmìme mno¾inu $\X=\{x_1,x_2,\ldots,x_6\}$ z pøedchozího pøíkladu -a poèítejme $\rank_\X(011001)$. Místo první neshody je oznaèeno puntíkem. -Platí $x>x_i$, tedy celý podstrom je men¹í ne¾ $x$, proèe¾ $\rank_\X(011001)=4$. +\s{Pøíklad:} Vezmìme mno¾inu $X=\{x_1,x_2,\ldots,x_6\}$ z pøedchozího pøíkladu +a poèítejme $\rank_X(011001)$. Místo první neshody je oznaèeno puntíkem. +Platí $x>x_i$, tedy celý podstrom je men¹í ne¾ $x$, proèe¾ $\rank_X(011001)=4$. Rádi bychom pøedchozí lemma vyu¾ili k~sestrojení tabulek, které podle uvedených hodnot vrátí rank prvku~$x$. K~tomu potøebujeme pøedev¹ím umìt indexovat tvarem @@ -142,7 +139,7 @@ ekvivalentn \:$C: \{1,\ldots,r\} \to B: B[C(i)]:=c_i$. \endlist -\s{Lemma 1':} $\rank_X(x)$ lze spoèítat v~konstatním èase~z: +\s{Lemma 1':} $\rank_X(x)$ lze spoèítat v~konstantním èase~z: \numlist\pnromanap \:funkce $C$ \:$x_1,\ldots,x_r$ @@ -154,7 +151,7 @@ ekvivalentn \:Tvar stromu závisí jen na~vzájemných vztazích mezi polohami znaèek, tak¾e je jednoznaènì urèený funkcí~$C$. \:Z~tvaru stromu a $x[B]$ jednoznaènì plyne list $x_i$ a tyto vstupy - jsou dostatenènì krátké na~to, abychom mohli pøedpoèítat tabulku. + jsou dostateènì krátké na~to, abychom mohli pøedpoèítat tabulku. \:Zjistíme prostým porovnáním. \:$x_i$ známe a MSB umíme na~RAMu poèítat v~konstantním èase. \endlist @@ -175,7 +172,7 @@ po \:$X=\{x_1,\ldots,x_r\}$ -- hodnoty prvkù v libovolném poøadí (pole èísel) \:$\varrho$ -- permutace na~$\{1,\ldots,r\}$ taková, ¾e $x_i=X[\varrho(i)]$ a $x_1