Dijkstrův algoritmus

Podobné dokumenty
= je prostý orientovaný graf., formálně c ( u, v) 0. dva speciální uzly: zdrojový uzel s a cílový uzel t. Dále budeme bez

Grafové algoritmy. Programovací techniky

TGH05 - aplikace DFS, průchod do šířky

V každém kroku se a + b zmenší o min(a, b), tedy vždy alespoň o 1. Jestliže jsme na začátku dostali 2

Vzdálenost uzlů v neorientovaném grafu

Algoritmus pro hledání nejkratší cesty orientovaným grafem

TGH05 - aplikace DFS, průchod do šířky

Algoritmy na ohodnoceném grafu

Grafové algoritmy. Programovací techniky

Stromové rozklady. Definice 1. Stromový rozklad grafu G je dvojice (T, β) taková, že T je strom,

Vrcholová barevnost grafu

8 Přednáška z

Konstrukce relace. Postupně konstruujeme na množině všech stavů Q relace i,

Základy matematické analýzy

Obsah prezentace. Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest

Zpracoval: 7. Matematická indukce a rekurse. Řešení rekurentních (diferenčních) rovnic s konstantními koeficienty.

Úvod do vybíravosti grafů, Nullstellensatz, polynomiální metoda

TGH06 - Hledání nejkratší cesty

Kapitola 1. Úvod. 1.1 Značení. 1.2 Výroky - opakování. N... přirozená čísla (1, 2, 3,...). Q... racionální čísla ( p, kde p Z a q N) R...

zejména Dijkstrův algoritmus pro hledání minimální cesty a hladový algoritmus pro hledání minimální kostry.

NEJKRATŠÍ CESTY I. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

1 Lineární prostory a podprostory

Použití dalších heuristik

Výroková a predikátová logika - IV

Vektorové podprostory, lineární nezávislost, báze, dimenze a souřadnice

opakování reprezentace grafů, dijkstra, bellman-ford, johnson

Algoritmizace diskrétních. Ing. Michal Dorda, Ph.D.

Operační výzkum. Síťová analýza. Metoda CPM.

Modely teorie grafů, min.kostra, max.tok, CPM, MPM, PERT

Kapitola 11. Vzdálenost v grafech Matice sousednosti a počty sledů

Naproti tomu gramatika je vlastně soupis pravidel, jak

Modely Herbrandovské interpretace

10 Přednáška ze

Množinu všech slov nad abecedou Σ značíme Σ * Množinu všech neprázdných slov Σ + Jazyk nad abecedou Σ je libovolná množina slov nad Σ

PRIMITIVNÍ FUNKCE. Primitivní funkce primitivní funkce. geometrický popis integrály 1 integrály 2 spojité funkce konstrukce prim.

TGH06 - Hledání nejkratší cesty

Regulární výrazy. Definice Množina regulárních výrazů nad abecedou Σ, označovaná RE(Σ), je definována induktivně takto:

Vybíravost grafů, Nullstellensatz, jádra

PŘEDNÁŠKA 2 POSLOUPNOSTI

PRIMITIVNÍ FUNKCE DEFINICE A MOTIVACE

Greenova funkce pro dvoubodové okrajové úlohy pro obyčejné diferenciální rovnice

Logické programy Deklarativní interpretace

Rovnice se separovanými proměnnými

Přijímací zkouška - matematika

fakulty MENDELU v Brně (LDF) s ohledem na disciplíny společného základu (reg. č. CZ.1.07/2.2.00/28.

Definice (Racionální mocnina). Buď,. Nechť, kde a a čísla jsou nesoudělná. Pak: 1. je-li a sudé, (nebo) 2. je-li liché, klademe

H {{u, v} : u,v U u v }

Ohodnocené orientované grafy

5 Orientované grafy, Toky v sítích

Lineární algebra : Polynomy

Riemannův určitý integrál

Jan Březina. Technical University of Liberec. 21. dubna 2015

Matematika I 12a Euklidovská geometrie

Problém obchodního cestujícího(tsp) Vstup: Množina n měst a vzdálenosti mezi nimi. Výstup: Nejkratší okružní cesta procházející všemi městy.

LEKCE10-RAD Otázky

LDF MENDELU. Simona Fišnarová (MENDELU) Základy lineárního programování VMAT, IMT 1 / 25

Lineární algebra : Báze a dimenze

Výroková a predikátová logika - II

Definice 1 eulerovský Definice 2 poloeulerovský

To je samozřejmě základní pojem konvergence, ale v mnoha případech je příliš obecný a nestačí na dokazování některých užitečných tvrzení.

STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach fronta

Martin Milata, Pokud je alespoň jeden rozměr čokolády sudý (s výjimkou tabulky velikosti 1x2, která už je od

Pumping lemma - podstata problému. Automaty a gramatiky(bi-aag) Pumping lemma - problem resolution. Pumping lemma - podstata problému

Vlastnosti regulárních jazyků

Algoritmizace prostorových úloh

Matematická analýza pro informatiky I. Limita funkce

Úvod do matematiky. Mgr. Radek Horenský, Ph.D. Důkazy

TOPOLOGIE A TEORIE KATEGORIÍ (2017/2018) 4. PREDNÁŠKA - SOUČIN PROSTORŮ A TICHONOVOVA VĚTA.

Jan Březina. Technical University of Liberec. 30. dubna 2013

TGH10 - Maximální toky

Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru:

Binární vyhledávací stromy pokročilé partie

Principy indukce a rekursivní algoritmy

Predik atov a logika - pˇredn aˇska () Predik atov a logika - pˇredn aˇska / 16

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

10. DETERMINANTY " # $!

Grafy. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13.

Úvod do teorie grafů

Diskrétní matematika. DiM /01, zimní semestr 2018/2019

Systém přirozené dedukce výrokové logiky

Nechť je číselná posloupnost. Pro všechna položme. Posloupnost nazýváme posloupnost částečných součtů řady.

Věta o dělení polynomů se zbytkem

1 Linearní prostory nad komplexními čísly

Základy elementární teorie čísel

V kompletním grafu nenastává problém. Každý uzel je soused se zbytkem vrcholů a může s nimi kdykoliv komunikovat.

Usuzování za neurčitosti

Lineární algebra : Násobení matic a inverzní matice

Základní pojmy teorie grafů [Graph theory]

ŘADY KOMPLEXNÍCH FUNKCÍ

Paralelní grafové algoritmy

Dynamické programování

2. Schurova věta. Petr Tichý. 3. října 2012

Příklad. Řešte v : takže rovnice v zadání má v tomto případě jedno řešení. Pro má rovnice tvar

V předchozí kapitole jsme podstatným způsobem rozšířili naši představu o tom, co je to číslo. Nadále jsou pro nás důležité především vlastnosti

i=1 Přímka a úsečka. Body, které leží na přímce procházející body a a b můžeme zapsat pomocí parametrické rovnice

PŘEDNÁŠKA 5 Konjuktivně disjunktivní termy, konečné distributivní svazy

Výroková a predikátová logika - II

Zimní semestr akademického roku 2014/ prosince 2014

FIT ČVUT MI-LOM Lineární optimalizace a metody. Dualita. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Základní datové struktury III: Stromy, haldy

Transkript:

Dijkstrův algoritmus Hledání nejkratší cesty v nezáporně hranově ohodnoceném grafu Necht je dán orientovaný graf G = (V, H) a funkce, která každé hraně h = (u, v) H přiřadí nezáporné reálné číslo označované L(h) nebo L(u, v). Je-li u 0, u 1,...,u k orientovaná cesta v G, pak její délkou nazveme číslo k L(u i 1, u i ). i=1 Jsou-li dány dva vrcholy u, v grafu G, cílem je určit, zda existuje orientovaná cesta z u do v a především pokud existuje, tak nalézt nejkratší z nich. Známé algoritmy pro tento problém určují bud vzdálenosti z u do všech ostatních vrcholů (mezi nimi i do v) a nebo naopak vzdálenosti ze všech vrcholů do v. Problém nalezení nejkratší cesty v grafu je řešen Bellman-Fordovým algoritmem, který nevyžaduje předpoklad o nezápornosti délky hrany. Pokud ovšem jsou hrany nezáporné, což je v praxi velmi časté, pokud například délky hran souvisejí s fyzickou vzdáleností vrcholů, je vhodné používat algoritmus Dijkstrův, který je jednoduší a především rychlejší. Počátek, ze kterého budeme hledat vzdálenosti do ostatních vrcholů si označíme jako v 0. Existuje řada variant implementace Dijkstrova algoritmu. Zde byla zvolena varianta, kde každý vrchol může být ve třech stavech: nedosažený, dosažený a probraný; dosažený přitom je chápán jako dosažený, ale neprobraný ; pro každý vrchol w, který je dosažený nebo probraný, je dáno číslo E(w) (E jako Estimation ), což, jak později dokážeme, bude horní odhad vzdálenosti z počátku v 0 do w a na konci výpočtu přímo vzdálenost z v 0 do w. Pro nedosažené vrcholy bude E(w) nedefinováno. Pokud w není počátek, pak jestliže E(w) je definováno, bude pro takový vrchol dán vrchol P(w); pomocí hodnot P bude možné pro každý vrchol w s definovaným E(w) snadno nalézt cestu délky E(w) z počátku do w způsobem, který bude popsán později. Dijkstrův algoritmus 1. označ počátek v 0 jako dosažený a E(v 0 ) := 0; 2. for každý vrchol w různý od počátku v 0 do 3. označ vrchol w jako nedosažený; 4. while existuje dosažený vrchol u do begin 5. zvol jako u dosažený vrchol, který má minimální E(u); 6. označ u jako probraný; 7. for všechny vrcholy w takové, že (u, w) je hrana do 8. if w je nedosažený nebo E(w) > E(u) + L(u, w) then begin 9. if w je nedosažený then označ w jako dosažený; 10. E(w) := E(u) + L(u, w); 11. P(w) := u; 12. end; 13. end. 1

Volba u znamená zvolit dosažený vrchol u takový, že E(u) E(w) pro každý dosažený vrchol w; takových vrcholů u může být více, pak je možno zvolit libovolný z nich. Je snadné dokázat, že se výpočet algoritmu zastaví: Lemma 1 Stav vrcholu se může měnit jen z nedosažený na dosažený nebo z dosažený na probraný. Důkaz: Jediné změny stavu proti počátečnímu nastavení mohou nastat v řádcích 6 a 9. Theorem 2 Výpočet Dijkstrova algoritmu se zastaví ponejvýše N iteracích while cyklu, kde N je počet vrcholů grafu. Důkaz: Z popisu algoritmu a předchozího lemmatu plyne, že množina probraných vrcholů se každou iterací cyklu zvětší o jeden vrchol a její velikost je přitom mezi 0 a N. V dalším budeme dokazovat různé vztahy mezi hodnotami proměnných. Některé platí stále, některé mohou být dočasně narušeny a v zápětí obnoveny. Budeme se proto zajímat, zda platí v okamžicích, kdy se začíná testovat podmínka while cyklu. Tyto okamžiky budeme nazývat vstupy do cyklu. V prvním řádku výpočtu se počátek v 0 označí jako dosažený a definuje se hodnota E(v 0 ). Při prvním vstupu do while cyklu je počátek jediným dosaženým vrcholem, bude tedy vybrán jako vrchol u v řádku 5 a v zápětí v řádku 6 označen jako probraný. Na základě lemmatu 1 pak již zůstane probraným až do konce výpočtu. Status ostatních vrcholů popisuje následující Lemma 3 Pokud w v 0, pak při každém vstupu do cyklu platí: E(w) je definováno právě když je definováno P(w) a to je právě když w je dosažený nebo probraný vrchol. Důkaz: Vrchol w jiný než počátek je po provedení inicializace v řádcích 2 a 3 nedosažený a E(w) a P(w) nejsou definovány. Uvažujme první okamžik, kdy se některé z těchto tvrzení změní. To se může stát pouze když je probírána hrana (u, w) pro nějaký vrchol u. V takovém případě se najednou změní klasifikace vrcholu w na dosažený a definují se hodnoty E(w) a P(w). Podle lemmatu 1 už vrchol w nikdy nestane nedosaženým a E(w) a P(w) zůstávají stále definovány. Velmi důležitým, i když na první pohled samozřejmým je následující Lemma 4 Je-li v probraný vrchol a w dosažený vrchol, pak E(v) E(w). Jestliže v je probraný vrchol, pak se hodnota E(v) nemůže změnit. Důkaz: Podle předchozího lemmatu jsou pro probrané a dosažené vrcholy hodnoty E definovány. Tvrzení lemmatu dokážeme indukcí podle počtu kroků výpočtu. Po provedení inicializace v řádcích 1-3 triviálně platí, neexistují probrané vrcholy. Necht platí do nějakého vstupu do while cyklu. Platnost tvrzení 2

by se mohla porušit bud změnou stavu nějakého vrcholu nebo změnou hodnoty E(w) nějakého vrcholu w při provádění těla cyklu. Předpokládejme, že se provádí tělo cyklu a v řádku 6 algoritmu byl vybrán vrchol u. Ukážeme, že pro každý již probraný vrchol v a každý dosažený vrchol w platí E(v) E(u) E(w). Při vstupu do cyklu E(v) E(u) představuje indukční předpoklad, nerovnost E(u) E(w) zase vyplývá z toho, jak byl vrchol u vybrán. Změny, které mohou nastat nebo nastanou při provádění těla cyklu s vybraným vrcholem u, které by mohly narušit platnost tvrzení lemmatu, jsou následující: Vrchol u je překlasifikován na probraný; jelikož E(u) E(w) pro každý dosažený w, lemma zůstává v platnosti. Objeví se nový dosažený vrchol x; pro takový vrchol se nastaví E(x) = E(u)+L(u, w), a v důsledku nezápornosti pro libovolné probrané v platí E(v) E(u) E(x), což je v souladu s tvrzením lemmatu. Pro některý dosažený vrchol x se hodnota E(x) změní na E(u) + L(u, w); podobně jako v předchozím odstavci se ukáže, že nová hodnota je stále alespoň tak velká, jako E(v) pro libovolný probraný vrchol v. Je-li vrchol x probraný a (u, x) je hrana, pak je E(x) E(u) E(u)+L(u, x) (levá nerovnost plyne z indukčního předpokladu, druhá z nezápornosti délek hran) a tedy podmínka E(x) > E(u)+L(u, x) v řádku 8 nebude nikdy splněna. U probraného vrcholu x proto již ke změně stavu nebo hodnoty E(x) nebo P(x) nemůže dojít. Lemma 5 Hodnota P(v 0 ) není nikdy definována. Důkaz: Po provedení inicializace P(v 0 ) definováno není a pokud by bylo definováno později, stalo by se to současně se změnou E(v 0 ) v okamžiku, kdy již v 0 je probraný. Tuto možnost ale předchozí lemma vyloučilo. Nyní ukážeme, že hodnoty P(w) umožňují pro každý probraný nebo dosažený vrchol w najít cestu z počátku do w, která má délku E(w). Lemma 6 Je-li P(w) definováno a označíme-li v = P(w), pak (v, w) je hrana v je probraný vrchol a E(v) + L(v, w) = E(w). Důkaz: Uvažujme jistý okamžik τ výpočtu, kdy P(w) je definováno. V okamžiku, kdy bylo P(w) naposledy měněno a to na hodnotu v, byla probírána hrana (v, w), a provedlo se dosazení P(w) := v. (P(w), w) = (v, w) je tedy hrana a vrchol v je probraný. Hodnota E(w) byla tehdy změněna na E(u) + L(v, w) a od té doby se do okamžiku τ nezměnila, protože změny E(w) a P(w) jsou spolu. Jelikož v bylo v okamžiku změny P(w) probrané, předchozí lemma říká, že E(v) se již také nezměnilo, proto rovnost E(v) + L(v, w) = E(w) zůstává v platnosti. Lemma 7 P je acyklická relace, neboli neexistuje posloupnost vrcholů w 0,..., w k taková, že w i 1 = P(w i ) pro i = 1,...,k a w k = P(w 0 ). 3

Důkaz: Z lemmatu 1 a podmínky cyklu plyne, že každý vrchol w, pro který je v průběhu výpočtu E(w) definováno, je na konci výpočtu probraný. Pro takový vrchol označme jako T(w) takové číslo T, že vrchol se stal probraným v T-té iteraci while cyklu. Jelikož se v každé iteraci stane probraným jediný vrchol, je tato funkce prostá. Jestliže v některém okamžiku je v probraný vrchol a w je dosažený, pak zřejmě T(v) < T(w). Kdykoli se nově definuje nebo mění P(w) pro nějaký vrchol w, stane se tak při probírání hrany (u, w) v okamžiku, kdy u krátce předtím byl označen za probraný vrchol a w je ještě (nově nebo dříve) dosažený. Kdykoliv je tedy u = P(w), je T(u) < T(w), což ale vylučuje možnost cyklu relace P. Jestliže tedy E(w) definováno, pak definujme posloupnost w = z 0, z 1,... předpisem z i = P(z i 1 ) pro i = 1,.... Na základě předchozího lemmatu musí tato posloupnost být prostá a protože množina vrcholů je konečná, musí i právě definovaná posloupnost být konečná. Předpokládejme, že do ní už není možno přidat další prvek. Podle lemmat 3, 6 a 5 tedy tato posloupnost končí vrcholem v 0. Posloupnost má tedy tvar w = z 0,..., z k = v 0 a podle lemmatu 6 je obrácená posloupnost v 0 = z k, z k 1,..., z 0 = w cestou z v 0 do w v grafu G. Tuto cestu nazveme vytčená cesta do w. Vytčená cesta je jednoznačně dána svým cílovým vrcholem. Lemma 8 Je-li E(w) definováno, pak existuje vytčená cesta do w a její délka je E(w). Důkaz: Existence vytčené cesty v 0 = w 0, w 1,...,w k = w z v 0 do w byla zdůvodněna v předchozím odstavci. Pro každou hranu (w i 1, w i ) této cesty platí podle lemmatu 6 E(w i ) E(w i 1 ) = L(w i 1, w i ), z čehož ihned plyne, že délka celé cesty je L(w 0, w 1 ) + + L(w k 1, w k ) = [E(w 1 ) E(w 0 )] + + [E(w k ) E(w k 1 )] = E(w k ) E(w 0 ) = E(w) E(v 0 ) = E(w). Řekneme,že cesta v0 = w 0,..., w k = w z počátku do vrcholu w je definitivní, jestliže její vrcholy w 0,..., w k 1 jsou probrané. Povšimněte si toho, že vrchol w k nemusí být probraný, definitivní cesta tedy může vést i do vrcholu, který není probraný. Je ovšem zřejmé, že Lemma 9 Je-li při vstupu do while cyklu v 0 = w 0,..., w k = w definitivní cesta, pak w je dosažený vrchol. Důkaz: Jakmile byl w k 1 označen za probraný, byla v zápětí probírána hrana (w k 1, w k ) a tedy se vrchol w k stal dosaženým, pokud již dosažený nebyl. Lemma 10 Je-li E(w) definováno, pak vytčená cesta do w je definitivní. Důkaz: Plyne ihned z lemmatu 6. Klíčové lemma důkazu správnosti Dijkstrova algoritmu je 4

Lemma 11 Je-li při některém vstupu do while cyklu E(w) definováno, pak E(w) je délka nejkratší definitivní cesty z v 0 do w. Důkaz: Z předchozího lemmatu plyne, že E(w) je délka vytčené cesty, která je definitivní. Je tedy třeba dokázat, že neexistuje definitivní cesta do w, kratší než E(w). Na začátku výpočtu existuje jediná definitivní cesta a to cesta v 0 (jediný vrchol, žádná hrana) do v 0 a ta má délku 0 = E(v 0 ), tvrzení tedy platí. Uvažujme okamžiky ukončení provádění některé iterace těla while cyklu a předpokládejme, že se platnost tvrzení v některém z nich poruší a uvažujme první okamžik, kdy se tak stane (před tím tedy tvrzení platí). Mohlo dojít bud k vytvoření nové definitivní cesty do w, která by byla kratší než E(w) nebo ke změně E(w). Pokud vznikla nová definitivní cesta v 0 = w 0, w 1,...,w k = w do w, stalo se tak v řádku 6 algoritmu, kdy byl některý vrchol u označen za probraný, takže tato cesta, která původně definitivní nebyla, se definitivní stala. V tom případě muselo být u = w i pro některé i takové, že 0 i < k. Pokud bylo i = k 1, neboli nově probraný vrchol u byl předposlední vrchol cesty, pak cesta v 0 = w 0, w 1,..., w k 1 již definitivní byla, tedy dle indukčního předpokladu její délka byla alespoň E(w k 1 ) a proto délka celé cesty v 0 = w 0, w 1,..., w k = w je alespoň E(w k 1 )+L(w k 1, w k ), což je hodnota, na kterou je vzápětí upraveno E(w k ) při probírání hrany (u, w) = (w k 1, w k ); k porušení platnosti tvrzení lemmatu by tedy došlo jen na okamžik, ale do dokončení iterace while cyklu se zase platnost obnoví. Pokud by bylo i < k 1 pak cesta v 0 = w 0, w 1,...,w i již definitivní byla a tedy délka tohoto úseku byla alespoň E(w i ) podle indukčního předpokladu. Jelikož délky hran jsou nezáporné, délka cesty v 0 = w 0, w 1,..., w k 1, rovná součtu délky cesty v 0 = w 0, w 1,..., w i (alespoň E(w i )) a délky cesty w i, w 1,..., w k (nezáporná),je alespoň E(w i ). Jelikož ale vrchol u byl právě přeřazen z dosažených mezi probrané, plyne z lemmatu 4,že E(w i ) E(w k 1 ) a přitom E(w k 1 ) je délka vytčené cesty do w k 1. Délka cesty w 0, w 1,...,w k, což je délka cesty w 0, w 1,..., w k 1 plus délka hrany (w k 1, w k ), tedy není nižší než délka cesty C tvořené vytčenou cestou do w k 1 prodlouženou o hranu (w k 1, w k ). Cesta C ale již definitivní byla a má tedy délku alespoň E(w k ) podle indukčního předpokladu, takže v tomto případě nemůže dojít k porušení platnosti lemmatu ani na krátký okamžik. Z toho již okamžitě plyne Theorem 12 V okamžiku ukončení výpočtu Dijkstrova algoritmu je pro každý vrchol w, do kterého existuje cesta z počátku v 0, E(w) definováno a rovno délce nejkratší cesty z v 0 do w a vytčená cesta do w je nejkratší cesta do w (nebo jedna z nejkratších cest). Důkaz: Nakonci výpočtu nejsou v grafu žádné dosažené vrcholy a tedy každá cesta do w je dosažená. Dijkstrův algoritmus je velmi blízký Bellman-Fordovu algoritmu; vznikne z něho tím, že pro probírání nevybereme první vrchol ve frontě Q, ale vrchol u s 5

nejnižším E(u) (fronta je tvořena právě dosaženými vrcholy, které jsou identické s vrcholy označenými k probírání v Bellman-Fordově algoritmu). Jelikož v případě nezáporně označených hran má dosažený vrchol s nejnižším E(u) již tuto hodnotu rovnou vzdálenosti od počátku, nebude již nikdy probírán a proto odpadá opakované probírání vrcholů, které způsobuje větší vypočetní složitost Bellman-Fordova algoritmu. Jestliže ale se opakované probírání vrcholů zakáže, jak je tomu u výše podané varianty Dijkstrova algoritmu, pak v případě existence záporně ohodnocených hran můžeme dostat chybný výsledek. Stejně tak se můžeme v řádku 7 algoritmu omezit (na rozdíl od obecného Bellman-Fordova algoritmu) na hrany vedoucí do jiných vrcholů než probraných, protože lemma 4 říká, že u hrany vedoucí do probraného vrcholu nemůže v grafu s nezáporně ohodnocenými hranami nikdy dojít ke zlepšení E(w). 6