-\h{CeloÄ\8dĂselnĂŠ dĂŠlky}
-
-UvaĹžujme nynĂ grafy, v~nichĹž jsou vĹĄechny dĂŠlky hran nezĂĄpornĂĄ celĂĄ Ä\8dĂsla omezenĂĄ
-nÄ\9bjakou konstantou~$L$. VĹĄechny vzdĂĄlenosti jsou tedy omezeny Ä\8dĂslem~$nL$, takĹže
-nÄ\82Ä\84m staÃ\84Â\8dÄ\82Â datovÄ\82Ä\84 struktura schopnÄ\82Ä\84 uchovÄ\82Ä\84vat takto omezenÄ\82Ä\84 celÄ\82Ä\84 Ã\84Â\8dÄ\82Âsla.
-
-PouĹžijeme jednoduchou pĹ\99ihrĂĄdkovou strukturu: pole indexovanĂŠ hodnotami od~0 do~$nL$,
-jeho $i$-tÄ\82Ë\9d prvek bude obsahovat seznam vrcholĹŻ, jejichĹž ohodnocenÄ\82 je rovno~$i$.
-Operace \<Insert> a \<Decrease> zvlĂĄdneme v~konstantnĂm Ä\8dase, budeme-li si u~kaĹždĂŠho
-prvku pamatovat jeho polohu v~seznamu. Operace \<ExtractMin> potĹÂ\99ebuje najÄ\82Ât prvnÄ\82Â
-neprÄ\82Ä\84zdnou pĹÂ\99ihrÄ\82Ä\84dku, ale jelikoĹž vÄ\82Âme, Ĺže posloupnost odebÄ\82ÂranÄ\82Ë\9dch minim je monotÄ\82Å\82nnÄ\82Â,
-staÄ\8dĂ hledat od mĂsta, kde se hledĂĄnĂ zastavilo minule. VĹĄechna hledĂĄnĂ pĹ\99ihrĂĄdek
-tedy zaberou dohromady $\O(nL)$ a celĂ˝ DijkstrĹŻv algoritmus bude trvat $\O(nL + m)$.
-
-Prostorovå sloŞitost $\O(nL+m)$ je nevalnå, ale můŞeme ji jednoduchým trikem
-snÄ\82ÂĹžit: VĹÄ\84imneme si, Ĺže vĹÄ\84echna koneÃ\84Â\8dnÄ\82Ä\84 ohodnocenÄ\82 vrcholĹŻ nemohou bÄ\82Ë\9dt vÃ\84Â\9btĹÄ\84Ä\82Â
-neĹž aktuĂĄlnĂ minimum zvÄ\9btĹĄenĂŠ o~$L$. JinĂ˝mi slovy vĹĄechny neprĂĄzdnĂŠ pĹ\99ihrĂĄdky
-se nachÄ\82Ä\84zejÄ\82 v~Ä\82Å\9fseku pole dlouhÄ\82Å m~$L+1$, takĹže staÃ\84Â\8dÄ\82 indexovat modulo~$L+1$.
-Pouze si musÄ\82Âme dÄ\82Ä\84vat pozor, abychom sprÄ\82Ä\84vnÃ\84Â\9b poznali, kdy se struktura
-vyprÄ\82Ä\84zdnila, coĹž zjistÄ\82Âme napĹÂ\99Ä\82Âklad pomocÄ\82 poÃ\84Â\8dÄ\82Âtadla otevĹÂ\99enÄ\82Ë\9dch vrcholĹŻ. Ã\84Â\8cas si
-asymptoticky nezhorĹÄ\84Ä\82Âme, prostor klesne na~$\O(L+m)$.
-
-PodobnÄ\82Ë\9d trik mĹŻĹžeme pouĹžÄ\82Ât i pro libovolnou jinou datovou strukturu: rozsah Ã\84Â\8dÄ\82Âsel
-rozdÃ\84Â\9blÄ\82Âme na~\uv{okna} velikosti~$L$ (v~$i$-tÄ\82Å m oknÃ\84Â\9b jsou Ã\84Â\8dÄ\82Âsla $iL,iL+1,\ldots,(i+1)L-1$).
-V~libovolnĂŠ chvĂli mohou tedy bĂ˝t neprĂĄzdnĂĄ nejvýťe dvÄ\9b okna. StaÄ\8dĂ nĂĄm proto
-poĹÂ\99Ä\82Âdit si dvÃ\84Â\9b struktury pro uklÄ\82Ä\84dÄ\82Ä\84nÄ\82 Ã\84Â\8dÄ\82Âsel v~rozsahu $0,\ldots,L-1$ -- jedna
-z~nich bude reprezentovat aktuĂĄlnĂ okno (to, v~nÄ\9bmĹž leĹželo minulĂŠ minimum),
-druhÄ\82Ä\84 okno bezprostĹÂ\99ednÃ\84Â\9b nÄ\82Ä\84sledujÄ\82ÂcÄ\82Â. Minimum maĹžeme z~prvnÄ\82 struktury; pokud
-uĹž je prÄ\82Ä\84zdnÄ\82Ä\84, obÃ\84Â\9b struktury prohodÄ\82Âme. Operace \<Insert> podle hodnoty urÃ\84Â\8dÄ\82Â,
-do~kterÄ\82Å struktury se mÄ\82Ä\84 vklÄ\82Ä\84dat. S~operacÄ\82 \<Decrease> je to sloĹžitÃ\84Â\9bjĹÄ\84Ä\82 --
-hodnota z~vyĹÄ\84ĹÄ\84Ä\82 struktury mĹŻĹže pĹÂ\99eskoÃ\84Â\8dit do tÄ\82Å niĹžĹÄ\84Ä\82Â, ale v~takovÄ\82Å m pĹÂ\99Ä\82ÂpadÃ\84Â\9b
-ji ve~vyĹĄĹĄĂ struktuĹ\99e vymaĹžeme (to je \<Decrease> na $-\infty$ nĂĄsledovanĂ˝
-\<ExtractMin>em) a do~tĂŠ niŞťà vloĹžĂme. To se kaĹždĂŠmu prvku mĹŻĹže pĹ\99ihodit nejvýťe
-jednou, takĹže stÄ\82Ä\84le platÄ\82Â, Ĺže se kaĹždÄ\82Ë\9d prvek Ä\82Å\9fÃ\84Â\8dastnÄ\82 $\O(1)$ vloĹženÄ\82 a $\O(1)$
-extrakcÄ\82Â minima.
-
-UkÄ\82Ä\84zali jsme tedy, Ĺže pro naĹÄ\84e potĹÂ\99eby postaÃ\84Â\8duje struktura schopnÄ\82Ä\84 uchovÄ\82Ä\84vÄ\82Ä\84nÄ\82Â
-Ä\8dĂsel menĹĄĂch nebo rovnĂ˝ch~$L$.
-
-NabÄ\82ÂzÄ\82 se pouĹžÄ\82Ât van Emde-BoasĹŻv strom z~kapitoly o~vÄ\82Ë\9dpoÃ\84Â\8detnÄ\82Âch modelech.
-Ten dosahuje sloĹžitosti $\O(\log\log L)$ pro operace \<Insert> a \<ExtractMin>,
-operaci \<Decrease> musĂme pĹ\99eklĂĄdat na \<Delete> a \<Insert>. CelkovĂĄ
-sloĹžitost Dijkstrova algoritmu vyjde $\O(L+m\log\log L)$, pĹÂ\99iÃ\84Â\8demĹž Ã\84Â\8das~$L$
-spotĹÂ\99ebujeme na inicializaci struktury (tÄ\82Å se lze za jistÄ\82Ë\9dch podmÄ\82Ânek vyhnout,
-viz zmĂnÄ\9bnĂĄ kapitola).
-
-VraĹĽme se ale jeĹĄtÄ\9b k~vyuĹžitĂ pĹ\99ihrĂĄdek\dots
-
-\h{VĂceĂşrovĹ\88ovĂŠ pĹ\99ihrĂĄdky}
-
-PodobnÄ\9b jako u~tĹ\99ĂdÄ\9bnĂ Ä\8dĂsel, i~zde se vyplĂĄcĂ stavÄ\9bt pĹ\99ihrĂĄdkovĂŠ struktury
-vĂceĂşrovĹ\88ovÄ\9b (pĹŻvodnÄ\9b popsĂĄno Goldbergem a Silversteinem \cite{goldberg:mlb}).
-JednotlivĂŠ hodnoty budeme zapisovat v~soustavÄ\9b o~zĂĄkladu~$B$,
-kterÄ\82Ë\9d zvolÄ\82Âme jako nÃ\84Â\9bjakou mocninu dvojky, abychom mohli s~Ã\84Â\8dÄ\82Âslicemi tohoto
-zĂĄpisu snadno zachĂĄzet pomocĂ bitovĂ˝ch operacĂ. KaĹždĂŠ Ä\8dĂslo tedy zabere nejvýťe
-$d=1+\lfloor\log_B L\rfloor$ Ã\84Â\8dÄ\82Âslic; pokud bude kratĹÄ\84Ä\82Â, doplnÄ\82Âme ho zleva nulami.
-
-NejvyĹĄĹĄĂ patro struktury bude tvoĹ\99eno polem $B$~pĹ\99ihrĂĄdek, v~$i$-tĂŠ z~nich
-budou uloĹžena ta Ã\84Â\8dÄ\82Âsla, jejichĹž Ã\84Â\8dÄ\82Âslice nejvyĹÄ\84ĹÄ\84Ä\82Âho ĹÂ\99Ä\82Ä\84du je rovna~$i$. Za~{\I aktivnÄ\82Â}
-prohlÄ\82Ä\84sÄ\82Âme tu pĹÂ\99ihrÄ\82Ä\84dku, kterÄ\82Ä\84 obsahuje aktuÄ\82Ä\84lnÄ\82 minimum. PĹÂ\99ihrÄ\82Ä\84dky s~menĹÄ\84Ä\82Âmi
-indexy jsou prĂĄzdnĂŠ a zĹŻstanou takovĂŠ aĹž do~konce vĂ˝poÄ\8dtu, protoĹže halda
-je monotĂłnnĂ. Pokud v~pĹ\99ihrĂĄdce obsahujĂcĂ minimum bude vĂce prvkĹŻ, budeme
-ji rozklĂĄdat podle druhĂŠho nejvyĹĄĹĄĂho Ĺ\99ĂĄdu na dalĹĄĂch~$B$ pĹ\99ihrĂĄdek atd.
-Celkem tak vznikne aĹž~$d$ Ä\82Å\9frovnÄ\82Â.
-
-\>Struktura bude obsahovat nÄ\82Ä\84sledujÄ\82ÂcÄ\82Â data:
+\h{Celočíselné délky}
+
+Uvažujme nyní grafy, v~nichž jsou všechny délky hran nezáporná celá čísla omezená
+nějakou konstantou~$L$. Všechny vzdálenosti jsou tedy omezeny číslem~$nL$, takže
+nám staÄ\8dà datová struktura schopná uchovávat takto omezená celá Ä\8dÃsla.
+
+Použijeme jednoduchou přihrádkovou strukturu: pole indexované hodnotami od~0 do~$nL$,
+jeho $i$-tý prvek bude obsahovat seznam vrcholů, jejichž ohodnocenà je rovno~$i$.
+Operace \<Insert> a \<Decrease> zvládneme v~konstantním čase, budeme-li si u~každého
+prvku pamatovat jeho polohu v~seznamu. Operace \<ExtractMin> potÅ\99ebuje najÃt prvnÃ
+neprázdnou pÅ\99ihrádku, ale jelikož vÃme, že posloupnost odebÃraných minim je monotónnÃ,
+stačí hledat od místa, kde se hledání zastavilo minule. Všechna hledání přihrádek
+tedy zaberou dohromady $\O(nL)$ a celý Dijkstrův algoritmus bude trvat $\O(nL + m)$.
+
+Prostorová složitost $\O(nL+m)$ je nevalná, ale můžeme ji jednoduchým trikem
+snÞit: VÅ¡imneme si, že vÅ¡echna koneÄ\8dná ohodnocenà vrcholů nemohou být vÄ\9btÅ¡Ã
+než aktuální minimum zvětšené o~$L$. Jinými slovy všechny neprázdné přihrádky
+se nacházejà v~úseku pole dlouhém~$L+1$, takže staÄ\8dà indexovat modulo~$L+1$.
+Pouze si musÃme dávat pozor, abychom správnÄ\9b poznali, kdy se struktura
+vyprázdnila, což zjistÃme napÅ\99Ãklad pomocà poÄ\8dÃtadla otevÅ\99ených vrcholů. Ä\8cas si
+asymptoticky nezhorÅ¡Ãme, prostor klesne na~$\O(L+m)$.
+
+Podobný trik můžeme použÃt i pro libovolnou jinou datovou strukturu: rozsah Ä\8dÃsel
+rozdÄ\9blÃme na~\uv{okna} velikosti~$L$ (v~$i$-tém oknÄ\9b jsou Ä\8dÃsla $iL,iL+1,\ldots,(i+1)L-1$).
+V~libovolné chvíli mohou tedy být neprázdná nejvýše dvě okna. Stačí nám proto
+poÅ\99Ãdit si dvÄ\9b struktury pro ukládánà Ä\8dÃsel v~rozsahu $0,\ldots,L-1$ -- jedna
+z~nich bude reprezentovat aktuální okno (to, v~němž leželo minulé minimum),
+druhá okno bezprostÅ\99ednÄ\9b následujÃcÃ. Minimum mažeme z~prvnà struktury; pokud
+už je prázdná, obÄ\9b struktury prohodÃme. Operace \<Insert> podle hodnoty urÄ\8dÃ,
+do~které struktury se má vkládat. S~operacà \<Decrease> je to složitÄ\9bjÅ¡Ã --
+hodnota z~vyÅ¡Å¡Ã struktury může pÅ\99eskoÄ\8dit do té nižšÃ, ale v~takovém pÅ\99ÃpadÄ\9b
+ji ve~vyšší struktuře vymažeme (to je \<Decrease> na $-\infty$ následovaný
+\<ExtractMin>em) a do~té nižší vložíme. To se každému prvku může přihodit nejvýše
+jednou, takže stále platÃ, že se každý prvek úÄ\8dastnà $\O(1)$ vloženà a $\O(1)$
+extrakcà minima.
+
+Ukázali jsme tedy, že pro naÅ¡e potÅ\99eby postaÄ\8duje struktura schopná uchovávánÃ
+čísel menších nebo rovných~$L$.
+
+NabÃzà se použÃt van Emde-Boasův strom z~kapitoly o~výpoÄ\8detnÃch modelech.
+Ten dosahuje složitosti $\O(\log\log L)$ pro operace \<Insert> a \<ExtractMin>,
+operaci \<Decrease> musíme překládat na \<Delete> a \<Insert>. Celková
+složitost Dijkstrova algoritmu vyjde $\O(L+m\log\log L)$, pÅ\99iÄ\8demž Ä\8das~$L$
+spotÅ\99ebujeme na inicializaci struktury (té se lze za jistých podmÃnek vyhnout,
+viz zmíněná kapitola).
+
+Vraťme se ale ještě k~využití přihrádek\dots
+
+\h{Víceúrovňové přihrádky}
+
+Podobně jako u~třídění čísel, i~zde se vyplácí stavět přihrádkové struktury
+víceúrovňově (původně popsáno Goldbergem a Silversteinem \cite{goldberg:mlb}).
+Jednotlivé hodnoty budeme zapisovat v~soustavě o~základu~$B$,
+který zvolÃme jako nÄ\9bjakou mocninu dvojky, abychom mohli s~Ä\8dÃslicemi tohoto
+zápisu snadno zacházet pomocí bitových operací. Každé číslo tedy zabere nejvýše
+$d=1+\lfloor\log_B L\rfloor$ Ä\8dÃslic; pokud bude kratÅ¡Ã, doplnÃme ho zleva nulami.
+
+Nejvyšší patro struktury bude tvořeno polem $B$~přihrádek, v~$i$-té z~nich
+budou uložena ta Ä\8dÃsla, jejichž Ä\8dÃslice nejvyÅ¡Å¡Ãho Å\99ádu je rovna~$i$. Za~{\I aktivnÃ}
+prohlásÃme tu pÅ\99ihrádku, která obsahuje aktuálnà minimum. PÅ\99ihrádky s~menÅ¡Ãmi
+indexy jsou prázdné a zůstanou takové až do~konce výpočtu, protože halda
+je monotónní. Pokud v~přihrádce obsahující minimum bude více prvků, budeme
+ji rozkládat podle druhého nejvyššího řádu na dalších~$B$ přihrádek atd.
+Celkem tak vznikne až~$d$ úrovnÃ.
+
+\>Struktura bude obsahovat následujÃcà data: