From: Martin Mares Date: Sun, 25 Oct 2009 16:40:56 +0000 (+0100) Subject: Pridana nova kapitola o randomizovanem hledani minimalniho rezu. X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=16406efd89422e96c7c3b1c214f683fee5cee561;p=ga.git Pridana nova kapitola o randomizovanem hledani minimalniho rezu. --- diff --git a/12-randcut/12-randcut.tex b/12-randcut/12-randcut.tex new file mode 100644 index 0000000..b89cdb5 --- /dev/null +++ b/12-randcut/12-randcut.tex @@ -0,0 +1,175 @@ +\input ../sgr.tex + +\prednaska{12}{Pravdìpodobnostní algoritmus na øezy}{} + +Nahlédnìme alespoò jednou kapitolou do~svìta pravdìpodobnostních algoritmù. +Není toti¾ výjimkou, ¾e s~pomocí generátoru náhodných èísel vyøe¹íme nìkteré +grafové problémy daleko snáze a èasto také efektivnìji ne¾ deterministicky. +Tento pøístup si pøedvedeme na~Kargerovì-Steinovì algoritmu \cite{karger:mincut} +pro hledání minimálního øezu v~neohodnoceném neorientovaném grafu. Pøipomeòme, +¾e deterministickými algoritmy jsme zatím dosáhli èasové slo¾itosti $\O(n^{5/3}m)$ +pomocí tokù nebo $\O(nm)$ Nagamochiho-Ibarakiho algoritmem. + +\h{Náhodné kontrakce} + +Uva¾ujme nejdøíve následující algoritmus, který náhodnì vybírá +hrany a kontrahuje je, dokud poèet vrcholù neklesne na~danou konstantù~$\ell$. + +\s{Algoritmus} $\hbox{\sc Contract}(G_0,\ell)$: +\algo +\:$G \leftarrow G_0$. +\:Dokud $n>\ell$: +\::Vybereme hranu $e\in E$ rovnomìrnì náhodnì. +\::$G \leftarrow G/e$ (kontrahujeme hranu~$e$, smyèky odstraòujeme, + paralelní hrany ponecháme). +\:Vrátíme jako výsledek graf~$G$. +\endalgo + +Jaká je pravdìpodobnost, ¾e výsledný graf~$G$ má stejnì velký minimální øez +jako zadaný graf~$G_0$? V¹imnìme si nejprve, ¾e ka¾dý øez v~grafu $G/e$ je i øezem +v~grafu~$G$ (a¾ na pøeznaèení hran pøi kontrakci, ale pøedpokládejme, ¾e hrany +mají nìjaké identifikátory, které kontrakce zachovává). Podobnì je-li v~grafu~$G$ +øez neobsahující hranu~$e$, odpovídá mu stejnì velký øez v~$G/e$. Velikost +minimálního øezu tedy kontrakcí nikdy neklesne, mù¾e pouze stoupnout, pokud +zkontrahujeme hranu le¾ící ve~v¹ech minimálních øezech, + +Zvolíme nyní pevnì jeden z~minimálních øezù~$C$ v~zadaném grafu a oznaèíme~$k$ jeho +velikost. Pokud algoritmus ani jednou nevybere hranu le¾ící v~tomto øezu, velikost +minimálního øezu v~grafu~$G$ bude rovnì¾ rovna~$k$. Jaká je pravdìpodobnost, ¾e +se tak stane? + +Oznaème $G_i$ stav grafu~$G$ pøed $i$-tým prùchodem cyklem a $n_i$ a $m_i$ poèet jeho +vrcholù a hran. Zøejmì $n_i=n-i+1$ (ka¾dou kontrakcí pøijdeme o~jeden vrchol). +Navíc ka¾dý vrchol má stupeò alespoò~$k$, jeliko¾ jinak by triviální øez okolo +tohoto vrcholu byl men¹í ne¾ minimální øez. Proto platí $m_i \ge kn_i/2$. Hranu +le¾ící v~øezu~$C$ tedy vybereme s~pravdìpodobností $k/m_i \le k/(kn_i/2) = 2/n_i += 2/(n-i+1)$. V¹echny hrany z~øezu~$C$ tedy postoupí do výsledného grafu~$G$ +s~pravdìpodobností +$$\eqalign{ +p &\ge \prod_{i=1}^{n-\ell} \left( 1 - {2\over n-i+1} \right) + = \prod_{i=1}^{n-\ell} {n-i-1 \over n-i+1} = \cr + &= {n-2\over n} \cdot {n-3\over n-1} \cdot {n-4\over n-2} \cdot \cdots \cdot {\ell+1\over \ell+3} \cdot {\ell\over \ell+2} \cdot {\ell-1 \over \ell+1} + = {\ell\cdot(\ell-1) \over n\cdot(n-1)}. \cr +}$$ + +Mù¾eme tedy zvolit pevnì~$\ell$, spustit na~zadaný graf proceduru {\sc Contract} +a ve~vzniklém konstantnì velkém grafu pak nalézt minimální øez hrubou silou +(to je obzvlá¹tì snadné pro $\ell=2$ -- tehdy staèí vzít v¹echny zbylé hrany). +Takový algoritmus nalezne minimální øez s~pravdìpodobností alespoò $c/n^2$, +kde~$c$ je konstanta závislá na~$\ell$. + +Nabízí se otázka, k~èemu je dobrý algoritmus, který vydá správný výsledek +s~pravdìpodobností na~øádu $1/n^2$. To opravdu není mnoho, ale stejnì jako +mnoho jiných randomizovaných algoritmù i tento mù¾eme iterovat: výpoèet +zopakujeme $K$-krát a pou¾ijeme nejmen¹í z~nalezených øezù. Ten u¾ bude +minimální s~pravdìpodobností +$$ +P_K \ge 1 - (1-c/n^2)^K \ge 1 - e^{-cK/n^2} = 1 - e^{-cK/n^2}. +$$ +(Druhá nerovnost platí díky tomu, ¾e $e^{-x} \ge 1-x$ pro v¹echna $x\ge 0$.) +Pokud tedy nastavíme poèet opakování~$K$ na $\Omega(n^2)$, mù¾eme tím pravdìpodobnost +chyby stlaèit pod libovolnou konstantu, pro $K=\Omega(n^2\log n)$ pod pøevrácenou +hodnotu libovolného polynomu v~$n$ a pro $K=\Omega(n^3)$ u¾ bude exponenciálnì malá. + +\h{Implementace} + +Odboème na chvíli k~implementaèním zále¾itostem. Jak reprezentovat graf, abychom +stihli rychle provádìt kontrakce? Bude nám staèit obyèejná matice sousednosti, +v~ní¾ pro ka¾dou dvojici vrcholù budeme udr¾ovat, kolik paralelních hran mezi nimi +vede. Pokud chceme kontrahovat hranu~$uv$, staèí projít v¹echny hrany vedoucí +(øeknìme) z~vrcholu~$u$ a zaøadit je k~vrcholu~$v$. To zvládneme v~èase $\O(n)$ +na jednu kontrakci. + +Pro náhodný výbìr hrany budeme udr¾ovat pole stupòù vrcholù, vybereme náhodnì +vrchol~$v$ s~pravdìpodobností úmìrnou stupni a poté projitím pøíslu¹ného øádku +matice sousednosti druhý vrchol~$v$ s~pravdìpodobností úmìrnou poètu hran +mezi~$uv$. To opìt trvá èas $\O(n)$. + +Procedura {\sc Contract} tedy pracuje v~èase $\O((n-\ell)\cdot n)$ a celý +$K$-krát ziterovaný algoritmus v~$\O(Kn^2)$. Pokud se spokojíme s~inverznì +polynomiální pravdìpodobností chyby, nalezneme minimální øez v~èase $\O(n^4\log n)$. + +\h{Kargerùv-Steinùv algoritmus} + +V¹imnìme si, ¾e bìhem kontrahování hran pravdìpodobnost toho, ¾e vybereme \uv{¹patnou} +hranu le¾ící v~minimálním øezu, postupnì rostla z~poèáteèních $2/n^2$ a¾ po obrovské +$2/3$ v~poslední iteraci (pro $\ell=2$). Mù¾eme tedy algoritmus vylep¹it tím, ¾e +se zastavíme døíve a pak pøejdeme na~spolehlivìj¹í zpùsob hledání øezu. + +Pokud zvolíme $\ell=\lceil n/\sqrt2 +1\rceil$, pak øez~$C$ pøe¾ije kontrahování +s~pravdìpodobností alespoò +$$ +{\ell\cdot (\ell-1) \over n\cdot (n-1)} +\ge {(n/\sqrt2+1)\cdot n/\sqrt2 \over n\cdot (n-1)} += {n/\sqrt2+1 \over \sqrt2 \cdot (n-1)} += {n+\sqrt 2 \over 2\cdot (n-1)} +\ge {1\over 2}. +$$ + +Jako onen spolehlivìj¹í zpùsob hledání øezu pak zavoláme tentý¾ algoritmus +rekurzivnì, pøièem¾ jak kontrakci, tak rekurzi provedeme dvakrát a z~výsledkù +vybereme ten men¹í, èím¾ pravdìpodobnost chyby sní¾íme. + +Hotový algoritmus bude vypadat následovnì: + +\s{Algoritmus} $\hbox{\sc MinCut}(G)$: +\algo +\:Pokud $n<7$, najdeme minimální øez hrubou silou. +\:$\ell\leftarrow \lceil \sqrt n + 1 \rceil$.\foot{To je ménì ne¾~$n$, kdykoliv $n\ge 7$.} +\:$C_1 \leftarrow \hbox{\sc MinCut}(\hbox{\sc Contract}(G,\ell))$. +\:$C_2 \leftarrow \hbox{\sc MinCut}(\hbox{\sc Contract}(G,\ell))$. +\:Vrátíme men¹í z~øezù $C_1$, $C_2$. +\endalgo + +Jakou bude mít tento algoritmus èasovou slo¾itost? Nejprve odhadnìme hloubku +rekurze: v~ka¾dém kroku se velikost vstupu zmen¹í $\sqrt 2$-krát, tak¾e strom +rekurze bude mít hloubku $\O(\log n)$. Na~$i$-té hladinì zpracováváme $2^i$ +podproblémù velikosti $n/2^{i/2}$. Pøi výpoètu ka¾dého podproblému voláme +dvakrát proceduru {\sc Contract}, která spotøebuje èas $\O((n/2^{i/2})^2) += \O(n^2/2^i)$. Souèet pøes v¹echny hladiny tedy èíní $\O(n^2)$, stejnì jako +u~pùvodního kontrakèního algoritmu. + +Zbývá spoèítat, s~jakou pravdìpodobností algoritmus nalezne skuteènì minimální øez. +Oznaème $p_i$ pravdìpodobnost, ¾e algoritmus na~$i$-té hladinì stromu +rekurze (poèítáno od~nejni¾¹í, nulté hladiny) vydá správný výsledek +pøíslu¹ného podproblému. Jistì je $p_0=1$ a platí rekurence +$p_i \ge 1 - (1 - 1/2 \cdot p_{i-1})^2$. Uva¾ujme posloupnost $g_i$, pro kterou +jsou tyto nerovnosti splnìny jako rovnosti, a~v¹imnìme si, ¾e $p_i\ge g_i$. +Víme tedy, ¾e $g_0=1$ a $g_i = g_{i-1} - g_{i-1}^2/4$. + +Nyní zavedeme substituci $z_i = 4/g_i - 1$, èili $g_i=4/(z_i+1)$, získáme +novou rekurenci pro~$z_i$: +$$ +{4 \over z_i+1} = {4\over z_{i-1}+1} - {4\over (z_{i-1}+1)^2}, +$$ +kterou u¾ mù¾eme snadno upravit: +$$\eqalign{ +{1\over z_i+1} &= {z_{i-1} \over (z_{i-1}+1)^2}, \cr +z_i+1 &= {z_{i-1}^2 + 2z_{i-1} + 1 \over z_{i-1}}, \cr +z_i+1 &= z_{i-1} + 2 + (1/z_{i-1}). \cr +}$$ +Z~poslední rovnosti plyne, ¾e $z_i \le z_{i-1} + 2$, co¾ spoleènì s~poèáteèní +podmínkou $z_0=4$ implikuje $z_i \le 2i+4$. Zpìtnou substitucí získáme $g_i \ge 4/(2i+5)$, +tedy $p_i \ge g_i = \Omega(1/i)$. + +Nyní si staèí vzpomenout, ¾e hloubka rekurze èiní $\O(\log n)$, a ihned získáme +odhad pro pravdìpodobnost správného výsledku $\Omega(1/\log n)$. Ná¹ algoritmus +tedy staèí ziterovat $\O(\log^2 n)$-krát, abychom pravdìpodobnost chyby stlaèili +pod pøevrácenou hodnotu polynomu. Dokázali jsme tím následující vìtu: + +\s{Vìta:} Iterováním algoritmu {\sc MinCut} nalezneme minimální øez v~neohodnoceném +neorientovaném grafu v~èase $\O(n^2\log^2 n)$ s~pravdìpodobností chyby $\O(1/n^c)$ +pro libovolnou konstantu $c>0$. + +\h{Cvièení} + +\numlist\ndotted +\:Zvolte lep¹í reprezentaci grafu, abyste prostorovou slo¾itost sní¾ili z~$\Theta(n^2)$ na~$\O(m)$. + Mù¾e se tím zmen¹it èasová slo¾itost? +\:Doka¾te, ¾e z~na¹eho rozboru pravdìpodobnosti chyby plyne, ¾e v~ka¾dém grafu je nejvý¹e $\O(n^2)$ + minimálních øezù. +\:Uka¾te, jak algoritmus upravit pro grafy s~ohodnocenými hranami. +\endlist + +\references +\bye diff --git a/12-randcut/Makefile b/12-randcut/Makefile new file mode 100644 index 0000000..fe4b138 --- /dev/null +++ b/12-randcut/Makefile @@ -0,0 +1,3 @@ +P=12-randcut + +include ../Makerules diff --git a/ga.bib b/ga.bib index 3a24181..cc08735 100644 --- a/ga.bib +++ b/ga.bib @@ -491,3 +491,17 @@ pages={225--231}, year={1973} } + +@article{ karger:mincut, + author = {Karger, David R. and Stein, Clifford}, + title = {A new approach to the minimum cut problem}, + journal = {J. ACM}, + volume = {43}, + number = {4}, + year = {1996}, + issn = {0004-5411}, + pages = {601--640}, + doi = {http://doi.acm.org/10.1145/234533.234534}, + publisher = {ACM}, + address = {New York, NY, USA}, +}