From: Martin Mares Date: Wed, 26 Oct 2011 20:08:51 +0000 (+0200) Subject: Dijkstra: Vylepseni dukazu BFM + odkazy na dalsi haldy X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=ae16bb3982f0024e21ed4c141c4dab5c0067e9bb;p=ga.git Dijkstra: Vylepseni dukazu BFM + odkazy na dalsi haldy --- diff --git a/13-dijkstra/13-dijkstra.tex b/13-dijkstra/13-dijkstra.tex index 37477e0..96c8bc3 100644 --- a/13-dijkstra/13-dijkstra.tex +++ b/13-dijkstra/13-dijkstra.tex @@ -179,19 +179,25 @@ kter udr¾ujeme ve~frontì (v¾dy relaxujeme vrchol na poèátku fronty, novì otevírané zaøazujeme na~konec). Co toto pravidlo zpùsobí? -\s{Vìta:} Èasová slo¾itost algoritmu~BFM je $\O(nm)$. +\s{Vìta:} Èasová slo¾itost algoritmu~BFM èiní $\O(nm)$. \proof Bìh algoritmu rozdìlíme na~fáze. Nultá fáze sestává z~vlo¾ení vrcholu~$u$ do~fronty. V~$(i+1)$-ní fázi relaxujeme ty vrcholy, které byly do~fronty ulo¾eny bìhem $i$-té fáze. -V¹imneme si, ¾e na~konci $i$-té fáze je ka¾dé ohodnocení $h(v)$ shora omezeno -délkou nejkrat¹ího ze~sledù z~$u$ do~$v$, které mají nejvý¹e~$i$ hran. Fází je -tedy nejvý¹e~$n$. - -Relaxace ka¾dého vrcholu pøitom trvá lineárnì se stupnìm vrcholu, tak¾e celá -fáze probìhne v~èase $\O(m)$. V¹echny fáze pak v~$\O(nm)$. +Jeliko¾ relaxace vrcholu trvá lineárnì se stupnìm vrcholu a ka¾dý vrchol +se dané fáze úèastní nejvý¹e jednou, trvá jedna fáze $\O(m)$. Zbývá ukázat, +¾e fází provedeme nejvý¹e~$n$. + +Indukcí doká¾eme, ¾e na konci $i$-té fáze je ka¾dé ohodnocení $h(v)$ shora omezeno +délkou nejkrat¹ího z~$uv$-sledù o~nejvý¹e~$i$ hranách. Pro $i=0$ to triviálnì +platí. Uva¾ujme nyní vrchol~$v$ na konci $(i+1)$-ní fáze a nìjaký nejkrat¹í $uv$-sled~$P$ +o~$i+1$ hranách. Oznaème $wv$ poslední hranu tohoto sledu a $P'$ sled bez této hrany, +který tedy má délku~$i$. Podle indukèního pøedpokladu je na konci $i$-té fáze +$h(w)\le \ell(P')$. Tuto hodnotu získalo $h(w)$ nejpozdìji v~$i$-té fázi, pøi tom jsme +vrchol~$w$ otevøeli, tak¾e jsme ho nejpozdìji v~$(i+1)$-ní fázi zavøeli a relaxovali. +Po této relaxaci je ov¹em $h(v)\le h(w)+\ell(w,v)\le \ell(P') + \ell(w,v) = \ell(P)$. \qed \s{Cvièení:} @@ -261,7 +267,9 @@ na~struktu na jediné patro, tedy na pole, které se opravdu ukázalo být optimální volbou pro husté grafy.) \:{\I Fibonacciho halda} \cite{ft:fibonacci} -- \ a \ stojí $\O(1)$, \ má slo¾itost $\O(\log n)$ [v¹e amortizovanì]. Dijkstrùv algoritmus proto dobìhne v~èase $\O(m + n\log n)$. - To je lineární pro grafy s~hustotou $\Omega(\log n)$. + To je lineární pro grafy s~hustotou $\Omega(\log n)$. Té¾e slo¾itosti operací dosahují + i jiné, ménì známé haldy \cite{haeupler:rankph,elmasry:violheap}, které mohou být v~praxi + výraznì rychlej¹í. \:{\I Monotónní haldy} -- mù¾eme pou¾ít nìjakou jinou haldu, která vyu¾ívá toho, ¾e posloupnost odebíraných prvkù je neklesající. Pro celá èísla na~\hbox{RAMu} to mù¾e být napøíklad Thorupova halda \cite{thorup:queue} se slo¾itostí $\O(\log\log n)$ u~operace \ diff --git a/ga.bib b/ga.bib index 74bc27e..97419fb 100644 --- a/ga.bib +++ b/ga.bib @@ -700,3 +700,21 @@ acmid = {129784}, publisher = {ACM}, } + +@article{ haeupler:rankph, + title={Rank-pairing heaps}, + author={Haeupler, B. and Sen, S. and Tarjan, R.}, + journal={Algorithms-ESA 2009}, + pages={659--670}, + year={2009}, + publisher={Springer} +} + +@article{ elmasry:violheap, + title={{The violation heap: a relaxed Fibonacci-like heap}}, + author={Elmasry, A.}, + journal={Computing and Combinatorics}, + pages={479--488}, + year={2010}, + publisher={Springer} +}