From: Martin Mares Date: Wed, 24 Jan 2007 10:36:35 +0000 (+0100) Subject: Drobne stylisticke zmeny a lepsi rozbor casove slozitosti prihradkove X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=dff6baf55094e5fd2c9da0929257c7065b29b622;p=ga.git Drobne stylisticke zmeny a lepsi rozbor casove slozitosti prihradkove struktury. --- diff --git a/3-bipcon/3-bipcon.tex b/3-bipcon/3-bipcon.tex index 71c2415..caf2a2e 100644 --- a/3-bipcon/3-bipcon.tex +++ b/3-bipcon/3-bipcon.tex @@ -2,8 +2,8 @@ \prednaska{3}{Bipartitní párování a globální k-souvislost}{} -V~minulé kapitole jsme se zabývali aplikacemi tokù na~hledání maximálního párování -a minimálního $st$-øezu. V~této si pøedvedeme dva algoritmy pro podobné problémy, +V~pøede¹lých kapitolách jsme se zabývali aplikacemi tokù na~hledání maximálního párování +a minimálního $st$-øezu. Nyní si pøedvedeme dva algoritmy pro podobné problémy, které se obejdou bez tokù. \h{Maximální párování v regulárním bipartitním grafu \cite{alon:matching}} @@ -27,7 +27,7 @@ perfektn Pokud zadaný graf nebude $2^d$-regulární, pomù¾eme si tím, ¾e ho novými hranami doplníme na $2^d$-regulární a pak si pøi splitech budeme vybírat ten podgraf, do~kterého padlo ménì nových hran, a uká¾eme, ¾e nakonec v¹echny zmizí. -Abychom graf pøíli¹ nezvìt¹ili, budeme sna¾it místo pøidávání úplnì nových +Abychom graf pøíli¹ nezvìt¹ili, budeme se sna¾it místo pøidávání úplnì nových hran pouze zvy¹ovat násobnost hran existujících. Pro ka¾dou hranu $e$ si tedy budeme pamatovat její násobnost $n(e)$. @@ -46,27 +46,27 @@ V Takto získáme $2^t$-regulární graf, jeho¾ reprezentace bude lineárnì velká. Na tento graf budeme aplikovat operaci Degree Split a budeme si vybírat v¾dy tu polovinu, kde bude ménì hran z~$F$. Po~$t$ iteracích dospìjeme k~párování -a jeliko¾ se~v~ka¾dém kroku zbavíme alespoò poloviny hran z~$F$, nebude toto párování obsahovat ¾ádnou a navíc -nebude ani obsahovat násobné hrany, tak¾e opravdu bude podgrafem zadaného grafu. +a jeliko¾ se~v~ka¾dém kroku zbavíme alespoò poloviny hran z~$F$, nebude toto párování obsahovat ¾ádnou takovou hranu +a navíc nebude ani obsahovat násobné hrany, a~tedy bude podgrafem zadaného grafu, jak potøebujeme. -Slo¾itost algoritmu je $\O(m \log n)$, jeliko¾ provádíme inicializaci v~$\O(m)$ a celkem $\log_2 kn=\O(\log n)$ iterací po~$\O(m)$. +Èasová slo¾itost algoritmu je $\O(m \log n)$, jeliko¾ provádíme inicializaci v~$\O(m)$ a celkem $\log_2 kn=\O(\log n)$ iterací po~$\O(m)$. \h{Stupeò souvislosti grafu} Problém zji¹tìní {\I stupnì hranové souvislosti} grafu lze pøevést na problém hledání minimálního øezu, který ji¾ pro zadanou dvojici vrcholù umíme øe¹it pomocí Dinicova algoritmu v~èase $\O(n^{2/3}m)$. -Pokud chceme najít minimum pøes v¹echny dvojice, mù¾eme vyzkou¹et v¹echny dvojice $(s,t)$. -To v¹ak lze snadno zrychlit, pokud si uvìdomíme, ¾e jeden z~vrcholù (tøeba $s$) lze zvolit -pevnì: pokud vezmeme libovolný øez $C$, pak jistì najdeme alespoò jedno~$t$, které padne +Pokud chceme najít minimum ze~v¹ech øezù v~grafu, mù¾eme vyzkou¹et v¹echny dvojice $(s,t)$. +To v¹ak lze snadno zrychlit, pokud si uvìdomíme, ¾e jeden z~vrcholù (tøeba $s$) mù¾eme zvolit +pevnì: vezmeme-li libovolný øez $C$, pak jistì najdeme alespoò jedno~$t$, které padne do~jiné komponenty ne¾ pevnì zvolené~$s$, tak¾e minimální $st$-øez bude nejvý¹e tak velký jako~$C$. -Pokud pracujeme s~orientovanými grafy, musíme projít jak øezy pro $s \rightarrow t$, tak i $t \rightarrow s$. +V~orientovaném grafu musíme projít jak øezy pro $s \rightarrow t$, tak i $t \rightarrow s$. Algoritmus bude mít slo¾itost $\O(n^{{5/3}}m)$. U~{\I vrcholové $k$-souvislosti} to ov¹em tak snadno nepùjde. Pokud by toti¾ fixovaný vrchol byl souèástí nìjakého -minimálního separátoru, algoritmus mù¾e selhat. Pøesto ale nemusíme procházet v¹echny dvojice vrcholù. Staèí si -pamatovat, kolik vrcholù $s$ jsme u¾ pro v¹echny $t$ zkontrolovali a nejmen¹í zatím nalezený separátor. Kdy¾ bude poèet -vrcholù vìt¹í ne¾ nejmen¹í separátor, tak u¾ jsme jistì na¹li jeden z minimálních øezù. Slo¾itost takového algoritmu pak -bude $\O(\kappa (G) n^{3/2} m)$, kde $\kappa(G)$ je stupeò souvislosti $G$, který hledáme. +minimálního separátoru, algoritmus mù¾e selhat. Pøesto ale nemusíme procházet v¹echny dvojice vrcholù. Staèí jako +$s$ postupnì zvolit více vrcholù, ne¾ je velikost minimálního separátoru. Algoritmus si tedy bude pamatovat, kolik +vrcholù u¾ pro¹el a nejmen¹í zatím nalezený $st$-separátor a jakmile poèet vrcholù pøekroèí velikost separátoru, +prohlásí separátor za~minimální. To zvládne v~èase $\O(\kappa (G) n^{3/2} m)$, kde $\kappa(G)$ je nalezený stupeò souvislosti~$G$. Pro minimální øezy v~neorientovaných grafech ov¹em existuje následující rychlej¹í algoritmus: @@ -86,7 +86,7 @@ Bu \s{Definice:} {\it Legálním uspoøádáním vrcholù} (LU) budeme nazývat lineární uspoøádání vrcholù $v_1 \ldots v_n$ takové, ¾e platí -$d(\{v_1 \ldots v_{i-1}\},v_i) \geq d(\{v_1 \ldots v_{i-1}\},v_j)$ pro $1 \leq ii$, $v_i$ a $v_j$ jsou oddìleny øezem $C$ a $j$ je minimální takové. +[Tedy $v_j$ je nejbli¾¹í vrchol na~druhé stranì øezu.] \endalgo -Ka¾dé $u_{i-1}$ je tedy buï $u_i$, pokud jsou $v_i$ a $v_{i-1}$ na stejné stranì øezu, nebo $u_{i-1}$ je $v_i$ pokud -jsou $v_i$ a $v_{i-1}$ na opaèné stranì øezu. Dostáváme tedy, ¾e $d(\{v_1\ldots v_{i-1}\},u_i)\leq d(\{v_1\ldots +Ka¾dé $u_{i-1}$ je tedy buï rovno $u_i$, pokud jsou $v_i$ a $v_{i-1}$ na stejné stranì øezu, nebo rovno $v_i$, pokud +jsou $v_i$ a $v_{i-1}$ na~stranách opaèných. Z~toho dostáváme, ¾e $d(\{v_1\ldots v_{i-1}\},u_i)\leq d(\{v_1\ldots v_{i-1}\},u_{i-1})$, proto¾e buïto $u_i=u_{i-1}$, a pak je nerovnost splnìna jako rovnost, nebo je $u_i=v_j$, $j>i$ a -nerovnost plyne z LU vrcholù $v_i$. +nerovnost plyne z~legálnosti uspoøádání. -Chceme ukázat, ¾e velikost libovolného øezu je alespoò taková, jako velikost øezu kolem vrcholu $v_n$. -Platí, ¾e $ \vert C \vert \geq \sum_{i=1}^{n-1} d(v_i,u_i)$. Uká¾eme, ¾e pravá strana je alespoò $d(v_n)$: +Chceme ukázat, ¾e velikost na¹eho øezu~$C$ je alespoò taková, jako velikost øezu kolem vrcholu $v_n$. +V¹imneme si, ¾e $ \vert C \vert \geq \sum_{i=1}^{n-1} d(v_i,u_i)$. Uká¾eme, ¾e pravá strana je alespoò $d(v_n)$: $$\eqalign{ \sum_{i=1}^{n-1} d(v_i,u_i) &= \sum_{i=1}^{n-1} d(\{v_1\ldots v_i\},u_i) - d(\{v_1 \ldots v_{i-1}\},u_i) \geq \cr &\geq \sum_{i=1}^{n-1} d(\{v_1 \ldots v_i\},u_i) - d(\{v_1 \ldots v_{i-1}\},u_{i-1}) = \cr @@ -112,14 +113,14 @@ $$\eqalign{ }$$ \qed -Dokázali jsme, ¾e libovolný øez separující $v_{n-1}$ a $v_n$ je vìt¹í ne¾ jednoduchý øez skládající se jen z hran +Dokázali jsme, ¾e libovolný øez separující $v_{n-1}$ a $v_n$ je alespoò tak velký jako jednoduchý øez skládající se jen z hran kolem~$v_n$. Kdy¾ tedy sestavíme nìjakou LU posloupnost vrcholù, budeme mít k dispozici jednoduchý minimální øez $v_{n-1}$ a~$v_n$. Následnì vytvoøíme graf $G'$, v nìm¾ $v_{n-1}$ a $v_n$ skontrahujeme. Rekurzivnì najdeme minimální øez v $G'$ (sestrojíme nové LU atd.). Hledaný minimální øez poté buïto oddìluje vrcholy $v_n$ a $v_{n-1}$ a potom je øez kolem vrcholu $v_n$ minimální, nebo vrcholy $v_n$ a $v_{n-1}$ neoddìluje, a v takovém pøípadì jej najdeme rekurzivnì. Hledaný øez je tedy men¹í z rekurzivnì nalezeného øezu a øezu kolem $v_n$. -Zbývá ukázat, jak konstruovat LU. Postaèí hladovì: Pamatujeme si $\forall v\neq v_1 \ldots v_{i-1}$ hodnotu $d(\{v_1 \ldots v_{i-1},v)$, oznaème ji $z_v$. V ka¾dém kroku vybereme vrchol $v$ s maximální hodnotou $z_v$ a prohlásíme ho za $v_i$ a pøepoèítáme~$z_v$. +Zbývá ukázat, jak konstruovat LU. Postaèí hladovì: Pamatujeme si $\forall v\neq v_1 \ldots v_{i-1}$ hodnotu $d(\{v_1 \ldots v_{i-1}\},v)$, oznaème ji $z_v$. V ka¾dém kroku vybereme vrchol $v$ s maximální hodnotou $z_v$, prohlásíme ho za $v_i$ a pøepoèítáme~$z_v$. Zde se hodí datová struktura, která doká¾e rychle hledat maxima a zvy¹ovat hodnoty prvkù, napøíklad Fibonacciho halda. Ta zvládne \ v~èase $\O(\log n)$ a \ v~$\O(1)$ @@ -128,11 +129,12 @@ amortizovan Pokud jsou kapacity malá celá èísla, mù¾eme vyu¾ít pøíhrádkové struktury. Budeme si udr¾ovat obousmìrný seznam zatím pou¾itých hodnot $z_v$, ka¾dý prvek takového seznamu bude obsahovat v¹echny vrcholy se spoleènou hodnotou $z_v$. Kdy¾ budeme -mít seznam seøazený, vybrání minimálního prvku znamená pouze podívat se na +mít seznam seøazený, vybrání minimálního prvku bude znamenat pouze podívat se na první prvek seznamu a z nìj odebrat jeden vrchol, pøípadnì celý prvek ze seznamu odstranit. Operace \ poté bude reprezentovat pouze pøesunutí vrcholu o malý poèet pøihrádek, pøípadnì zalo¾ení nové pøihrádky na správném místì. -\ i \ pak budou mít slo¾itost $\O(1)$ a celý algoritmus $\O(mn)$. +\ proto bude mít slo¾itost $\O(1)$, v¹echny \ dohromady $\O(m)$, +jeliko¾ za~ka¾dou hranu pøeskakujeme maximálnì jednu pøíhrádku, a celý algoritmus $\O(mn)$. \references \bye