From: Martin Mares Date: Tue, 25 Feb 2014 22:40:18 +0000 (+0100) Subject: Dekompozice: Pořádný popis Fredericksonovy clusterizace X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=ac504cd227f10d2e41fcc13fc7c66e3f59b96253;p=ga.git Dekompozice: Pořádný popis Fredericksonovy clusterizace --- diff --git a/9-decomp/9-decomp.tex b/9-decomp/9-decomp.tex index 08ce770..e423487 100644 --- a/9-decomp/9-decomp.tex +++ b/9-decomp/9-decomp.tex @@ -299,27 +299,103 @@ nejbli \h{Fredericksonova clusterizace} Mikro/makro-stromová dekompozice není jediný zpùsob, jak stromy rozkládat. Nìkdy -se hodí napøíklad následující my¹lenka: +se více hodí následující my¹lenka: -\s{Definice:} {\I (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 {\I (clustery)} $C_1, C_2, \ldots, C_k$ takový, ¾e platí: +\s{Definice:} {\I (Fredericksonova clusterizace)} Nech» $k\ge 1$ je pøirozené èíslo +a $T$~strom s~maximálním stupnìm nejvý¹e~3. Pak $k$-clusterizací stromu~$T$ +nazveme libovolný rozklad $V_1\cup\ldots\cup V_t$ mno¾iny~$V(T)$, pro který platí: \itemize\ibull -\:Ka¾dý vrchol se nachází v~právì jednom clusteru (hrany mohou vést i mezi clustery). -\:Ka¾dý cluster má nejvý¹e~$c$ vrcholù. -\:Vnìj¹í stupeò ka¾dého clusteru (tj. poèet hran, které vedou mezi $C_i$ a ostatními -clustery; mezi ka¾dou dvojicí clusterù poèítáme jen jednu hranu) je nejvý¹e~3. -Navíc pokud je právì~3, je cluster triviální, èili $\vert C_i \vert = 1$. -\:®ádné dva sousední clustery nelze spojit. +\:Podgrafy stromu~$T$ indukované jednotlivými~$V_i$ jsou souvislé. +Tìmto podgrafùm budeme øíkat {\I clustery} a znaèit je~$C_i$. +\:Z~ka¾dého clusteru vedou nejvý¹e 3~hrany do sousedních clusterù. +Takovým hranám øíkáme {\I vnìj¹í,} jejich poèet je {\I vnìj¹í stupeò} clusteru $\(C_i)$. +Hrany uvnitø clusterù nazveme {\I vnitøní.} +\:Nech» $\vert C_i\vert$ znaèí poèet vrcholù clusteru~$C_i$. +Pak pro v¹echny clustery platí $\vert C_i\vert \le k$ +a pro clustery vnìj¹ího stupnì~3 dokonce $\vert C_i\vert = 1$. +\:®ádné dva sousední clustery není mo¾né slouèit. \endlist -\s{Vìta:} (Frederickson \cite{frederickson91ambivalent}) Ka¾dá $c$-clusterizace grafu $G$ má $\O(\vert V(G)\vert /c)$ clusterù. Existuje -algoritmus, který jednu takovou najde v~lineárním èase. +\s{Úmluva:} +Clustery vnìj¹ího stupnì~0 se nazývají {\I izolované,} +stupnì~1 {\I listové,} +stupnì~2 {\I cestové} a +stupnì~3 {\I vìtvicí.} -\proof První èást rozborem pøípadù, druhá hladovì pomocí DFS. \qed +\s{Pozorování:} Nech» $C$ a~$D$ jsou sousední clustery (bez újmy na obecnosti $\(C) \ge \(D)$). +Kdy je lze slouèit? Pøedev¹ím $\vert C\vert + \vert D\vert$ musí být nejvý¹e rovno~$k$. Pak mohou +nastat následující pøípady: +\itemize\ibull +\:Pokud~$C$ i~$D$ jsou listové, lze je slouèit do jednoho izolovaného clusteru. +\:Pokud~$C$ je cestový a $D$~listový, lze je slouèit do listového clusteru. +\:Pokud~$C$ i~$D$ jsou cestové, lze je slouèit do cestového clusteru. +\:Pokud~$C$ je vìtvicí a $D$~listový, lze je slouèit do cestového clusteru. +\:V~ostatních pøípadech sluèovat nelze, nebo» by vznikl cluster vnìj¹ího stupnì~4 + nebo stupnì~3 s~více ne¾ jedním vrcholem. +\endlist + +\s{Vìta:} (Frederickson \cite{frederickson91ambivalent}) Ka¾dá $k$-clusterizace stromu~$T$ +na $n$~vrcholech obsahuje $\O(n/k)$ clusterù. + +\proof +Pokud clusterizace obsahuje pouze izolované nebo listové clustery, pak je konstantnì +velká a tvrzení triviálnì platí. + +Pokud navíc obsahuje cestové clustery, musí být clustery propojeny do jedné cesty, +která zaèíná a konèí listovými clustery a ostatní clustery jsou cestové. Cestové +clustery rozdìlíme na velké (alespoò $k/2$ vrcholù) a malé (ostatní). V¹imneme si, +¾e malé spolu nemohou sousedit. Velkých je pøitom nejvý¹e $n/k$, tak¾e malých +nejvý¹e $n/k+1$. + +Zbývá obecný pøípad, v~nìm¾ jsou i vìtvicí clustery. Uva¾me clusterizaèní strom~$S$: +jeho vrcholy odpovídají clusterùm, hrany externím hranám mezi nimi. Tento strom zakoøeòme +v~libovolném vìtvicím clusteru. + +Pokud ve~stromu~$S$ nahradíme ka¾dou nevìtvící se cestu hranou, vznikne nìjaký +komprimovaný strom~$S'$. V~nìm u¾ jsou pouze listové clustery (coby listy) a +vìtvicí clustery (jako vnitøní vrcholy). + +Nyní si v¹imneme, ¾e pro ka¾dý list~$\ell$ stromu~$S$ platí, ¾e tento cluster +spolu s~cestovými clustery nad ním (které se schovaly do hrany mezi~$\ell$ a jeho +otcem) musí mít velikost alespoò~$k$. V~opaèném pøípadì by toti¾ bylo mo¾né +tyto clustery spoleènì s~vìtvicím clusterem nad nimi slouèit do jediného clusteru, +co¾ by poru¹ilo poslední podmínku z~definice clusterizace. + +Proto strom~$S'$ obsahuje nejvý¹e $n/k$ listù. A~jeliko¾ v¹echny jeho vnitøní +vrcholy mají alespoò~2 syny, musí být vnitøních vrcholù také nanejvý¹ $n/k$. + +Zbývá zapoèítat cestové clustery. Uva¾me hranu~$e$ stromu~$S'$ a cestové clustery, +které se do ní zkomprimovaly. U¾ víme, ¾e je-li celková velikost tìchto clusterù~$r$, +mù¾e jich být nanejvý¹ $2r/k + 1$. A~jeliko¾ clustery jsou disjunktní, v~souètu +pøes v¹echny hrany~$e$ dostaneme $2n/k + \hbox{poèet hran stromu~$S'$} = \O(n/k)$. + +Clusterù v¹ech typù je tedy dohromady $\O(n/k)$. +\qed + +\s{Vìta:} (Frederickson \cite{frederickson91ambivalent}) Pro ka¾dé~$k$ lze $k$-clusterizaci +stromu o~$n$~vrcholech najít v~èase $\O(n)$. + +\proof +Clusterizaci lze najít upraveným hledáním do hloubky, ale pøi tom je nutné øe¹it +mnoho rùzných pøípadù sluèování clusterù. Místo toho pou¾ijeme následující +hladový algoritmus. + +Nejprve vytvoøíme z~ka¾dého vrcholu triviální cluster. Taková clusterizace +splòuje v¹echny podmínky kromì poslední. Budeme tedy clustery hladovì sluèovat. + +Poøídíme si frontu clusterù, u~nich¾ jsme je¹tì nezkontrolovali sluèitelnost. +Na poèátku do ní umístíme v¹echny clustery. Pak v¾dy odebereme cluster, prozkoumáme +jeho sousedy a pokud mezi nimi je nìjaký, s~ním¾ lze sluèovat, tak to provedeme. +Nový cluster ulo¾íme do fronty, oba staré z~fronty odstraníme. + +V¹imneme si, ¾e pøi ka¾dé kontrole poklesne velikost fronty o~1 -- buïto jsme +nesluèovali a zmizel pouze kontrolovaný cluster, anebo sluèovali, ale pak zmizely +dva clustery a pøibyl jeden. Jeliko¾ kontrolu i slouèení zvládneme v~konstantním +èase, celý algoritmus dobìhne v~èase $\O(n)$. +\qed \s{Pou¾ití:} Pøedchozí variantu Union-Find problému bychom také mohli vyøe¹it nahrazením -vrcholù stupnì $>3$ \uv{kruhovými objezdy bez jedné hrany}\foot{tzv. francouzský trik}, +vrcholù stupnì vìt¹ího ne¾~3 \uv{kruhovými objezdy bez jedné hrany}, nalezením $(\log n)$-clusterizace, pou¾itím bitové reprezentace mno¾in uvnitø clusterù a pøebarvovací struktury na~hrany mezi clustery.