]> mj.ucw.cz Git - ga.git/commitdiff
Dekompozice: styl a poznamka o uziti naseho specialniho pripadu Union-Findu.
authorMartin Mares <mj@ucw.cz>
Wed, 24 Jan 2007 20:20:03 +0000 (21:20 +0100)
committerMartin Mares <mj@ucw.cz>
Wed, 24 Jan 2007 20:20:03 +0000 (21:20 +0100)
10-decomp/10-decomp.tex
ga.bib

index 2749ff8e0d3edfa438d47896eb0ff47199c23ab1..b5509b6bf831dd9d00a65af3a194630bf828865a 100644 (file)
@@ -21,7 +21,7 @@ v~Kruskalov
 \s{Triviální øe¹ení:} Ka¾dé tøídì pøiøadíme unikátní barvu, kterou obarvíme prvky tøídy. Operace \<Find>
 porovnává barvy, operace \<Union> prvky jedné tøídy pøebarvuje.
 
-Operace \<Find> tak pracuje v~konstantním èase, \<Union> mù¾e zabrat a¾ lineární. Mù¾eme si
+Operace \<Find> tak pracuje v~konstantním èase, \<Union> mù¾e zabrat a¾ lineární èas. Mù¾eme si
 pomoci tím, ¾e v¾dy pøebarvíme {\I men¹í} ze~sluèovaných ekvivalenèních tøíd (budeme
 si pro ka¾dou tøídu pamatovat seznam jejích prvkù a velikost). Tehdy mù¾e být ka¾dý
 prvek pøebarven jen $\O(\log n)$-krát, jeliko¾ ka¾dým pøebarvením se alespoò zdvojnásobí
@@ -38,7 +38,7 @@ jedn
 \:{\I Union by rank:} ka¾dý koøen $v$ si pamatuje svùj rank $r(v)$. Pokud spojujeme
 dva stromy s~koøeny $v$, $w$ a $r(v)<r(w)$, pøipojíme $v$ pod~$w$ a rank zachováme.
 Pokud $r(v)=r(w)$, pøipojíme libovolnì a nový koøen bude mít rank $r(v)+1$.%
-\foot{Podobnì by fungovalo pravidlo {\I Union by size,} které pøipojuje men¹í
+\foot{Stejnì by fungovalo pravidlo {\I Union by size,} které pøipojuje men¹í
 strom pod vìt¹í, ale ranky máme radìji, neb jsou skladnìj¹í a snáze se analyzují.}
 
 \:{\I Path compression:} pokud z~vrcholu vystoupíme do~koøene (napøíklad
@@ -51,6 +51,8 @@ m
 bude omezena $\O(\log n)$.%
 \foot{Mimochodem, Path compression samotná by také na~slo¾itost $\O(\log n)$ amortizovanì staèila.}
 
+Ve~skuteènosti se popsaná struktura chová daleko lépe:
+
 \s{Vìta:} (Tarjan, van Leeuwen \cite{tarjan84setunion}) Kombinace Union by rank a Path compression vede k~amortizované
 slo¾itosti obou operací $\O(\alpha(n))$, kde $\alpha$ je inverzní Ackermannova funkce.%
 \foot{Existuje varianta tohoto algoritmu, která dosahuje stejné slo¾itosti i v~nejhor¹ím
@@ -59,9 +61,17 @@ p
 \h{Union-Find s~pøedem známými Uniony}
 
 Dále nás bude zajímat speciální varianta Union-Find problemu, v~ní¾ dopøedu známe
-posloupnost unionù, èili strom, který spojováním komponent vznikne. Popí¹eme algoritmus,
+posloupnost Unionù, èili strom, který spojováním komponent vznikne.\foot{Kdy se to hodí?
+Tøeba v~Thorupovì lineárním algoritmu \cite{thorup:usssp} na~nejkrat¹í cesty nebo
+v~Weiheho takté¾ lineárním algoritmu \cite{weihe:paths} na~hledání hranovì disjunktních
+cest v~rovinných grafech.}
+Jiná interpretace tého¾ (jen pozpátku) je dekrementální udr¾ování komponent
+souvislosti lesa: na~poèátku je dán les a umíme smazat hranu a otestovat, zda jsou
+dva vrcholy v~tém¾e stromu.
+
+Popí¹eme algoritmus,
 který po~poèáteèním pøedzpracování v~èase $\O(n)$ zvládne \<Union> i \<Find> v~amortizovanì
-konstantním èase. Tento algoritmus je kombinací dekompozic popsaných v~\cite{alstrup97optimal}
+konstantním èase. Tento algoritmus je kombinací dekompozic popsaných Alstrupem v~\cite{alstrup97optimal}
 a \cite{alstrup98marked}.
 
 \s{Definice:} {\I (Microtree/Macrotree dekompozice)} Pro zakoøenìný strom $T$ o~$n$ vrcholech
@@ -74,14 +84,14 @@ definujeme:
 \endlist
 
 \s{Pozorování:} Ka¾dý mikrostrom má nejvý¹e $\log n$ listù. Pod ka¾dým listem makrostromu le¾í
-alespoò jeden mikrostrom\foot{Mù¾e jich být i více, pøedstavte si dekompozici hvìzdy.}, tak¾e
+alespoò jeden mikrostrom (mù¾e jich být i více, pøedstavte si dekompozici hvìzdy), tak¾e
 listù makrostromu je nejvý¹e $n/\log n$.
 
 Vnitøních vrcholù makro- i mikrostromù ale mù¾e být ne¹ikovnì mnoho, proto¾e se ve~stromech mohou
 vyskytovat dlouhé cesty. Pomù¾eme si snadno: ka¾dou cestu si budeme pamatovat zvlá¹» a ve~stromu
-ji nahradíme hranou, která bude existovat právì tehdy, kdy¾ budou pøítomny v¹echny hrany cesty.
+ji nahradíme hranou, která bude vlo¾ena právì tehdy, kdy¾ budou pøítomny v¹echny hrany cesty.
 
-\s{Algoritmus pro cesty:} Cestu délky~$l$ rozdìlíme na~úseky délky $\log n$, pro nì¾ si pamatujeme
+\s{Algoritmus pro cesty:} Cestu délky~$l$ rozdìlíme na~úseky délky $\log n$, pro nì¾ si ulo¾íme
 mno¾iny ji¾ pøítomných hran (po~bitech jako èísla). Pak si je¹tì pamatujeme zkomprimovanou cestu (hrany
 odpovídají úsekùm a jsou pøítomny právì tehdy, jsou-li pøítomny v¹echny hrany pøíslu¹ného úseku)
 délky $l/\log n$ a pro ni \uv{pøebarvovací} strukturu pro Union-Find.
@@ -97,12 +107,12 @@ d
 \algo
 \:Pokud $x$ a $y$ jsou v~tém¾e úseku, otestujeme bitovými operacemi, zda
   jsou v¹echny hrany mezi $x$ a $y$ pøítomny.
-\:Pokud jsou v~rùzných, rozdìlíme cestu z~$x$ do~$y$ na~posloupnost celých úsekù,
+\:Pokud jsou v~rùzných úsecích, rozdìlíme cestu z~$x$ do~$y$ na~posloupnost celých úsekù,
   na~které nám odpoví zkomprimovaná cesta, a~dva dotazy v~krajních èásteèných úsecích.
 \endalgo
 
 Operace uvnitø úsekù pracují v~èase $\O(1)$, operace na~zkomprimované cestì v~$\O(\log l)$
-amortizovanì, ale je jich $\O(l/\log n)=\O(l/\log l)$, tak¾e celkovì zaberou lineární èas.
+amortizovanì, ale za~dobu ¾ivota struktury je jich $\O(l/\log n)=\O(l/\log l)$, tak¾e celkovì zaberou lineární èas.
 
 \s{Algoritmus pro mikrostromy:} Po~kompresi cest má ka¾dý mikrostrom nejvý¹e $2\log n$
 vrcholù, èili také nejvý¹e tolik hran. Hrany si oèíslujeme pøirozenými èísly, ka¾dou
@@ -117,13 +127,13 @@ p
 
 \algo
 \:Najdeme poøadové èíslo $i$ hrany $xy$ (máme pøedpoèítané).
-\:$F := F \cup \{i\}$.
+\:$F \leftarrow F \cup \{i\}$.
 \endalgo
 
 \>$\<Find>(x,y):$
 
 \algo
-\:$P := P_x \mathop{\Delta} P_v$ (mno¾ina hran le¾ících na~cestì z~$x$ do~$y$)
+\:$P \leftarrow P_x \mathop{\Delta} P_v$ (mno¾ina hran le¾ících na~cestì z~$x$ do~$y$).
 \:Pokud $P\setminus F=\emptyset$, le¾í $x$ a $y$ ve~stejnì komponentì, jinak ne.
 \endalgo
 
@@ -148,15 +158,15 @@ zda je p
 \:Pokud $x$ a $y$ le¾í uvnitø jedné cesty, zeptáme se cestové struktury a konèíme.
 \:Pokud $x$ le¾í uvnitø nìjaké cesty, zjistíme dotazem na~cestovou strukturu,
    ke~kterému krajnímu vrcholu cesty je pøipojen, a~$x$ nahradíme tímto vrcholem.
-   Není-li pøipojen k~¾ádnému, je~evidentnì odpovìï na~celý \<Find> negativní,
+   Není-li pøipojen k~¾ádnému, je~evidentnì odpovìï na~celý \<Find> negativní;
    pokud k~obìma, vybereme si libovolný, proto¾e jsou stejnì v~cestovì komprimovaném
    stromu spojeny hranou. Analogicky pro~$y$.
-\:[Nyní jsou $x$ a $y$ vrcholy cestovì zkomprimovaného stromu.]
+   \hfil\break [Nyní jsou $x$ a $y$ vrcholy cestovì zkomprimovaného stromu.]
 \:Le¾í-li $x$ a $y$ v~jednom mikrostromu, zeptáme se struktury pro~mikrostrom.
 \:Je-li $x$ uvnitø mikrostromu, zeptáme se mikrostruktury na~spojení s~koøenem mikrostromu.
   Není-li, odpovíme {\sc ne}, stejnì jako kdy¾ není pøítomna pøíslu¹ná spojovací hrana.
   Jinak $x$ nahradíme listem makrostromu, do~kterého spojovací hrana vede. Podobnì pro~$y$.
-\:[Nyní jsou $x$ a $y$ vrcholy makrostromu.]
+  \hfil\break [Nyní jsou $x$ a $y$ vrcholy makrostromu.]
 \:Odpovíme podle struktury pro makrostrom.
 \endalgo
 
@@ -176,7 +186,7 @@ se hod
 
 \s{Definice:} (Fredericksonova clusterizace) Nech» $G$ je graf s~vrcholy stupòù nejvý¹e~3
 a $c\ge 1$. Pak $c$-clusterizací grafu $G$ nazveme libovolný rozklad
-$G$ na~souvislé podgrafy (clustery) $G_1, G_2, \ldots, G_k$ takový, ¾e platí:
+$G$ na~souvislé podgrafy (clustery) $C_1, C_2, \ldots, C_k$ takový, ¾e platí:
 \itemize\ibull
 \:$\forall v \in V \exists ! i: v \in C_i$.
 \:$\forall i: \vert C_i\vert \le c$.
@@ -222,8 +232,8 @@ $a_1,\ldots a_n$ tak, abychom um
 èasem na~pøevod dotazu.
 
 \proof Strom projdeme do~hloubky a poka¾dé, kdy¾ nav¹tívíme vrchol (v~inorderu),
-zapí¹eme jeho hloubku. ${\rm LCA}(x,y)$ pak bude nejhlub¹í vrchol mezi poslední
-náv¹tìvou~$x$ a první náv¹tìvou~$y$, nebo opaènì.
+zapí¹eme jeho hloubku. ${\rm LCA}(x,y)$ pak bude nejhlub¹í vrchol mezi libovolnou
+náv¹tìvou~$x$ a libovolnou náv¹tìvou~$y$.
 \qed
 
 \s{Triviální øe¹ení RMQ:}
@@ -231,7 +241,7 @@ n
 \:Pøedpoèítáme v¹echny mo¾né dotazy: pøedzpracování $\O(n^2)$, dotaz $\O(1)$.
 \:Pro ka¾dé $i$ a $j\le \log n$ pøedpoèítáme $m_{ij} = \min\{ a_i, a_{i+1}, \ldots, a_{i+2^j-1} \}$,
 èili minima v¹ech blokù velkých jako nìjaká mocnina dvojky. Kdy¾ se poté nìkdo zeptá
-na~minimum bloku $a_i,a_{i+1},\ldots,a_{j-1}$, najdeme nejvìt¹í $k$ takové, ¾e $2^k < j-i$
+na~minimum bloku $a_i,a_{i+1},\ldots,a_{j-1}$, najdeme nejvìt¹í~$k$ takové, ¾e $2^k < j-i$
 a vrátíme:
 $$\min( \min\{ a_i, \ldots, a_{i+2^k-1} \}, \min\{ a_{j-2^k}, \ldots, a_{j-1} \} ).$$
 Tak zvládneme dotazy v~èase $\O(1)$ po~pøedzpracování v~èase $\O(n\log n)$.
@@ -267,10 +277,10 @@ $a_1,\ldots,a_{j-1}$ a prav
 
 \s{Lemma:} Kartézský strom je mo¾né zkonstruovat v~lineárním èase.
 
-\proof Pou¾ijeme inkrementální algoritmus, v¾dy si budeme pamatovat
+\proof Pou¾ijeme inkrementální algoritmus. V¾dy si budeme pamatovat
 kartézský strom pro ji¾ zpracované prvky a pozici posledního zpracovaného
 prvku v~tomto stromu. Kdy¾ pøidáváme dal¹í prvek, hledáme místo, kam ho
-pøipojit, od~tohoto oznaèeného prvku nahoru. Pov¹imneme si, ¾e vzhledem
+pøipojit, od~tohoto oznaèeného prvku nahoru. Pov¹imnìme si, ¾e vzhledem
 k~potenciálu rovnému hloubce oznaèeného prvku je èasová slo¾itost pøidání
 prvku amortizovanì konstantní.
 \qed
diff --git a/ga.bib b/ga.bib
index 8d05b247a0c0e3a6fe743be39baefc7f422433f5..ade7962bee8459a1aa681e868ccfc7358f21dab3 100644 (file)
--- a/ga.bib
+++ b/ga.bib
   number={124},
   institution={Digital Systems Research Center}
 }
+
+@article{ weihe:paths,
+  title={{Edge-Disjoint (s, t)-Paths in Undirected Planar Graphs in Linear Time}},
+  author={Weihe, K.},
+  journal={Journal of Algorithms},
+  volume={23},
+  number={1},
+  pages={121--138},
+  year={1997},
+  publisher={Elsevier}
+}