]> mj.ucw.cz Git - ga.git/commitdiff
Drobne stylisticke zmeny a lepsi rozbor casove slozitosti prihradkove
authorMartin Mares <mj@ucw.cz>
Wed, 24 Jan 2007 10:36:35 +0000 (11:36 +0100)
committerMartin Mares <mj@ucw.cz>
Wed, 24 Jan 2007 10:36:35 +0000 (11:36 +0100)
struktury.

3-bipcon/3-bipcon.tex

index 71c2415e5ca760865860cf5855fd4841a34bbced..caf2a2ed018f29caa025ec37d78f2f6f06001436 100644 (file)
@@ -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 i<j\leq n$.
+$d(\{v_1 \ldots v_{i-1}\},v_i) \geq d(\{v_1 \ldots v_{i-1}\},v_j)$ pro ka¾dé $1 \leq i<j\leq n$.
 
 \s{Lemma:} Je-li $v_1 \ldots v_n$ LU na $G$, pak $r(v_{n-1},v_n)=d(v_n)$.
 
@@ -95,15 +95,16 @@ $d(\{v_1 \ldots v_{i-1}\},v_i) \geq d(\{v_1 \ldots v_{i-1}\},v_j)$ pro $1 \leq i
 \algo
 \:$u_0 := v_1$
 \:$u_i := v_j$ tak, ¾e $j>i$, $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 \<DeleteMax> v~èase $\O(\log n)$ a \<Increase> 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 \<Increase> 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ì.
-\<DeleteMax> i \<Increase> pak budou mít slo¾itost $\O(1)$ a celý algoritmus $\O(mn)$.
+\<DeleteMax> proto bude mít slo¾itost $\O(1)$, v¹echny \<Increase> dohromady $\O(m)$,
+jeliko¾ za~ka¾dou hranu pøeskakujeme maximálnì jednu pøíhrádku, a celý algoritmus $\O(mn)$.
 
 \references
 \bye