From: Martin Mares Date: Tue, 31 Mar 2009 08:16:53 +0000 (+0200) Subject: Slidy k Dijkstrovu algoritmu. X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;ds=sidebyside;h=a56512a3bb588bc2972bdadb2e747a6b4b65a01d;p=ads1.git Slidy k Dijkstrovu algoritmu. --- diff --git a/slides/dijkstra.tex b/slides/dijkstra.tex new file mode 100644 index 0000000..02ef236 --- /dev/null +++ b/slides/dijkstra.tex @@ -0,0 +1,81 @@ +\input slidemac.tex + +\language=\czech +\chyph + +\def\note{\color{RawSienna}} +\def\cmt{~~\color{Blue}} + +\slide{Nejkrat¹í cesty: Prùzkumnický algoritmus} + +$\(v_0):$ + +\algo +\:$Z(*)\leftarrow{\bf N}$, $Z(v_0)={\bf O}$ {\cmt znaèky: {\sem N}evidìn, {\sem O}tevøen, {\sem U}zavøen} +\:$D(*)\leftarrow\infty$, $D(v_0)=0$ {\cmt odhady vzdáleností} +\:$P(*)\leftarrow ?$ {\cmt pøedchùdci, ?=nedefinováno} +\:Dokud existuje vrchol~$u$ takový, ¾e $Z(u)={\bf O}$: +\::{\note Prozkoumáme vrchol~$u$, èili:} +\::$Z(u)\leftarrow{\bf U}$ +\::Pro v¹echny vrcholy~$v$, do kterých vede hrana z~$u$: +\:::Je-li $D(u)+\ell(u,v) < D(v)$: +\::::$D(v) \leftarrow D(u) + \ell(u,v)$ +\::::$P(v) \leftarrow u$ +\::::$Z(v) \leftarrow {\bf O}$ +\endalgo + +\bigskip + +{\sem Vìta:} Pokud se algoritmus zastaví, pak $\forall v \; D(v)=d(v_0,v)$ a graf \\ +$C=(V,\{ \left( v,P(v) \right) \mid v\in V \land D(v)\ne\infty \})$ je strom nejkrat¹ích cest. + +\endslide + +\slide{Nejkrat¹í cesty: Dijkstrùv algoritmus} + +$\(v_0):$ + +\algo +\:{\note Inicializace jako u~Prùzkumnického algoritmu} +\:Dokud existuje vrchol~$u$ takový, ¾e $Z(u)={\bf O}$: +\::Zvolíme~$u$ tak, aby $Z(u)={\bf O}$ a $D(u)$ bylo minimální. +\::{\note Prozkoumáme vrchol~$u$.} +\endalgo + +\bigskip + +{\sem Lemma:} Algoritmus jednou uzavøený vrchol znovu neotevøe. + +{\sem Dùsledek:} Algoritmus se zastaví po nejvý¹e~$n$ prùchodech a vydá\\ +vzdálenosti z~$v_0$ a strom nejkrat¹ích cest. + +\endslide + +\slide{Dijkstrùv algoritmus: Jádro pudla} + +$\(v_0):$ + +\algo +\:$M\leftarrow V$ {\cmt mno¾ina nevidìných a otevøených vrcholù} +\:{\color{OliveGreen}$D(*)\leftarrow\infty$, $D(v_0)=0$} {\cmt Insert} +\:Dokud $M\ne\emptyset$: +\::{\color{OliveGreen}Zvolíme $u\in M$, jeho¾ $D(u)$ je minimální.} {\cmt DeleteMin} +\::{\color{OliveGreen}$M\leftarrow M\setminus\{u\}$} +\::Je-li $D(u)=\infty$, skonèíme. +\::Pro v¹echny vrcholy~$v$, do kterých vede hrana z~$u$: +\:::{\color{OliveGreen}$D(v) \leftarrow \min( D(v), D(u)+\ell(u,v))$ {\cmt Decrease} \\ +{\note (nutné pouze pokud $v\in M$)}} +\endalgo + +\bigskip + +{\sem Pozorování:} Potøebujeme datovou strukturu pro uchování v¹ech $D(\cdot)$, +která bude umìt operace {\color{Blue}\}, {\color{Blue}\} a {\color{Blue}\}. + +\medskip + +Èasová slo¾itost pak bude $\O(n\cdot T_{\hbox{\ifonts Ins}} + n\cdot T_{\hbox{\ifonts DelMin}} + m\cdot T_{\hbox{\ifonts Dec}})$. + +\endslide + +\end