]> mj.ucw.cz Git - ga.git/commitdiff
Dijkstra: Vylepseni dukazu BFM + odkazy na dalsi haldy
authorMartin Mares <mj@ucw.cz>
Wed, 26 Oct 2011 20:08:51 +0000 (22:08 +0200)
committerMartin Mares <mj@ucw.cz>
Wed, 26 Oct 2011 20:08:51 +0000 (22:08 +0200)
13-dijkstra/13-dijkstra.tex
ga.bib

index 37477e02849b8a9878cbed9aee4bbf8ba554454b..96c8bc35a63e0ced50f419f2581b5e1ea0c7ff4b 100644 (file)
@@ -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} -- \<Insert> a \<Decrease> stojí $\O(1)$, \<ExtractMin> 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 \<ExtractMin>
diff --git a/ga.bib b/ga.bib
index 74bc27ecba48df4c797fa5a9896b1e49d12ca512..97419fb74eb21bab385af82ed09d52bb471221af 100644 (file)
--- a/ga.bib
+++ b/ga.bib
  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}
+}