From: Martin Mares Date: Wed, 24 Jan 2007 20:20:03 +0000 (+0100) Subject: Dekompozice: styl a poznamka o uziti naseho specialniho pripadu Union-Findu. X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=7c993929568292d9d0c4301f217c0a28627436f1;p=ga.git Dekompozice: styl a poznamka o uziti naseho specialniho pripadu Union-Findu. --- diff --git a/10-decomp/10-decomp.tex b/10-decomp/10-decomp.tex index 2749ff8..b5509b6 100644 --- a/10-decomp/10-decomp.tex +++ b/10-decomp/10-decomp.tex @@ -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 \ porovnává barvy, operace \ prvky jedné tøídy pøebarvuje. -Operace \ tak pracuje v~konstantním èase, \ mù¾e zabrat a¾ lineární. Mù¾eme si +Operace \ tak pracuje v~konstantním èase, \ 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) i \ 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 \>$\(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ý \ negativní, + Není-li pøipojen k~¾ádnému, je~evidentnì odpovìï na~celý \ 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 8d05b24..ade7962 100644 --- a/ga.bib +++ b/ga.bib @@ -449,3 +449,14 @@ 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} +}