-\def\X{{\cal X}}
-\def\B{{\cal B}}
-\def\and{\ \&\ }
\def\msb{{\rm MSB}}
\def\rank{{\rm Rank}}
\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.
$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}
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
\:$\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
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
\:$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$
\: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
\:$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<x_2<\ldots<x_r$ (vektor o~$r\cdot\log r$ bitech)
-\:$B$ -- mno¾ina \uv{zajímavých} bitových pozic (setøidìný vektor o~$r\cdot\log w$ bitech)
+\:$B$ -- mno¾ina \uv{zajímavých} bitových pozic (setøídìný vektor o~$r\cdot\log w$ bitech)
\:$C$ -- funkce popisující znaèky: $c_i=B[C(i)]$ (vektor o~$r\cdot r$ bitech)
\endlist
\s{Insert(x)}
\algo
-\:$i := \rank_\X(x)$
+\:$i := \rank_X(x)$
\:Pokud $x=x_i$, hodnota u¾ je pøítomna.
\:Ulo¾íme $x$ do~pole~$X$ a vlo¾íme jeho pozici na~$i$-té místo v~permutaci~$\varrho$.
\:Pøepoèítáme $c_{i-1}$ a $c_i$. Pro ka¾dou zmìnu $c_j$:
\s{Delete(x)}
\algo
-\:$i := \rank_\X(x)$ (víme, ¾e $x_i=x$).
+\:$i := \rank_X(x)$ (víme, ¾e $x_i=x$).
\:Sma¾eme $x_i$ z~pole~$X$ (napøíklad prohozením s~posledním prvkem) a pøíslu¹nì upravíme~$\varrho$.
\:Pøepoèítáme $c_{i-1}$ a $c_i$ a upravíme $B$ a $C$ jako pøi Insertu.
\endalgo
\todo{Aplikace na~kostry.}
\bye
+
+% LocalWords: MSB Vlozeni