From: Martin Mares Date: Mon, 23 May 2011 19:06:12 +0000 (+0200) Subject: Cesty: Korektury od Karla X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=02a92fd7fe84c7805d336a3e37436664fdf56fde;p=ads1.git Cesty: Korektury od Karla --- diff --git a/5-cesty/5-cesty.tex b/5-cesty/5-cesty.tex index 0575879..36cb185 100644 --- a/5-cesty/5-cesty.tex +++ b/5-cesty/5-cesty.tex @@ -27,8 +27,8 @@ spln V~grafu bez záporných cyklù existuje ke~ka¾dému nejkrat¹ímu sledu z~$u$ do~$v$ stejnì dlouhá $uv$-cesta. \proof Máme-li nejkrat¹í $uv$-sled, který není cestou, opakuje se v~nìm nìjaký vrchol -$w \in V(G)$. Délka cyklu $l(c) \geq 0 \Rightarrow l(u\dots v\dots w) \leq l(pùvodní -sled)$. Tento postup mù¾eme opakovat a po koneèném poètu krokù dostaneme cestu, tedy +$w \in V(G)$. Délka cyklu $\ell(c) \geq 0 \Rightarrow \ell(u\dots v\dots w) \leq \ell(\hbox{pùvodní +sled})$. Tento postup mù¾eme opakovat a po koneèném poètu krokù dostaneme cestu, tedy platí trojúhelníková nerovnost. \qed \s{Jednoduché pøípady} @@ -36,56 +36,59 @@ plat \itemize\ibull \:Pokud $l$ je konstantní funkce, pou¾ijeme BFS. Èasová slo¾itost bude $\Theta(m+n)$. -\:Délky hran jsou malá pøirozená èísla $l(x, y) \in\{1, \dots, L\}$ podrozdìlíme hrany +\:Délky hran jsou malá pøirozená èísla $\ell(x, y) \in\{1, \dots, L\}$ podrozdìlíme hrany a pou¾ijeme BFS. Èasová slo¾itost $\Theta(Lm+n)$. \:DAG (orientovaný acyklický graf) indukcí pøes topologické uspoøádání v èase $\Theta(m+n)$. \endlist -\s{Definice:} $D_k(v):=$ minimální délka ze sledù z $v_0$ do $v$ o právì k hranách. +\s{Definice:} $D_k(v):=$ minimální délka ze v¹ech sledù z $v_0$ do $v$ o právì $k$ hranách. $D_0(v)=0$ pokud $v=v_0$, jinak $D_0(v)=\infty$. -$d(v_0, v)=\min D_k(v)$ +$d(v_0, v)=\min D_k(v)$ kde $1 \leq k \leq n-1$. -Kdy¾ známe $D_0 \dots D_{k-1}$ spoèteme $D_k=\min D_{k-1}(u)+l(u, v)$. +Kdy¾ známe $D_0 \dots D_{k-1}$ spoèteme $D_k=\min D_{k-1}(u)+\ell(u, v)$ pro taková $u$ +¾e $(u, v)\in E(G)$. -Naivní implementace pobì¾í $n(\sum_v deg^+(v))+n$ (musíme pøièíst na -konec $n$ za izolované vrcholy), úpravíme $\sum_v deg^+(v)=m$. Bohu¾el +Naivní implementace pobì¾í $n(\sum_v {\rm deg}^+(v))+n$ (musíme pøièíst na +konec $n$ za izolované vrcholy), upravíme $\sum_v {\rm deg}^+(v)=m$. Bohu¾el spotøebujeme $\Theta(n^2)$ pamìti. Nevýhodou této implementace je pøistupování k hranám pozpátku. -\s{Bellman-Fordùv algoritmus} +\s{Bellmanùv-Fordùv algoritmus} \algo \:$D(*) \leftarrow \infty, D(s) \leftarrow 0$ \:Pro $k=1, \dots, n-1$: \::$D_k(*) \leftarrow \infty$ \::Pro $\forall v\in V(G)$: \:::Pro $\forall w (v, w)\in E(G)$: -\::::$D(w)\leftarrow \min(D(w), D_{k-1}(v)+l(v, w))$ +\::::$D(w)\leftarrow \min(D(w), D_{k-1}(v)+\ell(v, w))$ \endalgo Pokud by i v $n$-tém kroku nìco vykonal, graf obsahuje záporný cyklus. -\s{Vìta:} Bellman--Fordùv algoritmus najde v èase $\Theta(nm)$ vzdálenosti $d(v_0, v)$ +\s{Vìta:} Bellmanùv--Fordùv algoritmus najde v èase $\Theta(nm)$ vzdálenosti $d(v_0, v)$ pro $\forall v\in V(G)$. \proof Invarianty: \itemize\ibull \:Koneèné $D(v)$ v¾dy odpovídá délce nìjakého sledu z $v_0 \rightarrow w$ -\:Na konci k-tého prùchodu vnìj¹m cyklem platí $D(w)\leq \min$ délka sledu z $v_0 +\:Na konci $k$-tého prùchodu vnìj¹m cyklem platí $D(w)\leq \min$ délka sledu z $v_0 \rightarrow v$ o ménì ne¾ $k$ hranách z toho plyne ¾e na konci $D(w)\leq d(v_0, v)$ Nech» nejkrat¹í sled $v_0\rightarrow w$ o ménì ne¾ $k$ hranách konèí hranou $(v, w)$, zastavme algoritmus v okam¾iku kdy v $k$-tém prùchodu zpravovává hranu $(v, w)$ tehdy -$D(w)\leq D(v)+l(v, w)$ a $D(v)$ je dle indukèního pøedpokladu men¹í nebo rovný +$D(w)\leq D(v)+\ell(v, w)$ a $D(v)$ je dle indukèního pøedpokladu men¹í nebo rovný minimální délce sledu $v_0\rightarrow v$ o $\leq k$ hránách. \endlist \qed -\s{"Prùzkumnický algoritmus"} -Stav: $D(v)$ je ohodnoceníí, $S(v)$ stav (vidìn, otevøen -- od posledního prozkoumání -se $D(v)$ zmìnilo, zavøen není potøeba zkoumat znovu, nic by se nezmìnilo). +\s{\uv{Prùzkumnický algoritmus}} +Stav: $D(v)$ je délka zatím nejkrat¹í nalezené cesty do vrcholu $v$, $S(v)$ stav +vrcholu ($N$ nevidìn -- vrchol jsme je¹tì nepotkali, $O$ otevøen -- od posledního prozkoumání +se $D(v)$ zmìnilo, $Z$ zavøen -- není potøeba zkoumat znovu, nic by se nezmìnilo). $P(v)$ je +pøedchùdce $v$. \algo \:$D(*)\leftarrow \infty, D(v_0)=0, S(*)\leftarrow N, S(v_0)\leftarrow O, @@ -93,17 +96,19 @@ P(*)\leftarrow ?$ \:Dokud $\exists u$: $S(u)=O$ opakuj: \::$S(u)\leftarrow Z$ \::Pro $\forall v: (u, v)\in E(G)$: -\:::Je-li $D(u)+l(u, v)Toto lemma bude zanecháno bez dùkazu. + +\s{Lemma} Pokud se zastaví, pak dosa¾itelné vrcholy jsou zavøené a $S(v)=Z$ pak platí $D(v)=d(v_0, v)$. \proof @@ -114,7 +119,7 @@ proj Vezmìme minimání protipøíklad co do poètu hran. Nech» $v$ je nejbli¾¹í vrchol takový ¾e $D(v)\neq d(v_0, v)$, tudí¾ musí být vìt¹í (odpovídá délce nìjakého sledu). $u:=$ pøedchùdce $v$ na nejkrat¹í cestì tedy $D(u)$ je správnì. Algoritmus zkoumal u na -nastavil finální $D(u)$, tedy zpracoval hranu $(u, v)$ a $D(v)\leq D(u)+l(u, v)$, co¾ +nastavil finální $D(u)$, tedy zpracoval hranu $(u, v)$ a $D(v)\leq D(u)+\ell(u, v)$, co¾ je opravdová vzdálenost. Dostali jsme spor s tím, ¾e $D(x)$ neroste. \qed