PB165 Grafy a sítě. Hledání nejkratších cest. PB165 Grafy a sítě



Podobné dokumenty
3. Ve zbylé množině hledat prvky, které ve srovnání nikdy nejsou napravo (nevedou do nich šipky). Dát do třetí

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

(a) = (a) = 0. x (a) > 0 a 2 ( pak funkce má v bodě a ostré lokální maximum, resp. ostré lokální minimum. Pokud je. x 2 (a) 2 y (a) f.

Vzdálenost uzlů v neorientovaném grafu

2.8.9 Parametrické rovnice a nerovnice s absolutní hodnotou

STEREOMETRIE. Vzdálenost bodu od přímky. Mgr. Jakub Němec. VY_32_INOVACE_M3r0113

Kvadratické rovnice pro učební obory

Nerovnice s absolutní hodnotou

M - Rovnice - lineární a s absolutní hodnotou

E-ZAK. metody hodnocení nabídek. verze dokumentu: QCM, s.r.o.

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

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

3.2.4 Podobnost trojúhelníků II

Jan Březina. Technical University of Liberec. 17. března 2015

PB165 Grafy a sítě. Kostry grafu. PB165 Grafy a sítě

Dijkstrův algoritmus

{ } Kombinace II. Předpoklady: =. Vypiš všechny dvoučlenné kombinace sestavené z těchto pěti prvků. Urči počet kombinací pomocí vzorce.

Postup práce s elektronickým podpisem

Dualita v úlohách LP Ekonomická interpretace duální úlohy. Jiří Neubauer. Katedra ekonometrie FEM UO Brno

Pingpongový míček. Petr Školník, Michal Menkina. TECHNICKÁ UNIVERZITA V LIBERCI Fakulta mechatroniky, informatiky a mezioborových studií

Využití EduBase ve výuce 2

2.1. Pojem funkce a její vlastnosti. Reálná funkce f jedné reálné proměnné x je taková

Tvorba trendové funkce a extrapolace pro roční časové řady

TGH06 - Hledání nejkratší cesty

1.3.1 Kruhový pohyb. Předpoklady: 1105

Jarníkův algoritmus. Obsah. Popis

Grafové algoritmy. Programovací techniky

Teorie grafů. Bedřich Košata

Často potřebujeme hledat mezi dvěma vrcholy grafu cestu, která je v nějakém

Dutý plastický trojúhelník by Gianelle

Svobodná chebská škola, základní škola a gymnázium s.r.o. pochopení pojmů a výpočtů objemů a obvodů

Dopravní úloha. Jiří Neubauer. Katedra ekonometrie FEM UO Brno

( ) Kreslení grafů funkcí metodou dělení definičního oboru I. Předpoklady: 2401, 2208

Rozvrhování zaměstnanců

Obchodní řetězec Dokumentace k návrhu databázového systému

2.7.2 Mocninné funkce se záporným celým mocnitelem

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

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

4.6.6 Složený sériový RLC obvod střídavého proudu

Dijkstrův algoritmus (připomenutí)

UŽITÍ DERIVACÍ, PRŮBĚH FUNKCE

Použití dalších heuristik

Abstrakt. Následující text obsahuje detailní popis algoritmu Minimax, který se používá při realizaci rozhodování

Kvantové počítače algoritmy (RSA a faktorizace čísla)

Umělá inteligence. Příklady využití umělé inteligence : I. konstrukce adaptivních systémů pro řízení technologických procesů

TGH06 - Hledání nejkratší cesty

Lokální a globální extrémy funkcí jedné reálné proměnné

65. ročník matematické olympiády Řešení úloh klauzurní části školního kola kategorie B

Algoritmy na ohodnoceném grafu

Funkce více proměnných

KIV/ZI Základy informatiky. MS Excel maticové funkce a souhrny

Statistiky cyklistů. Základní statistické ukazatele ve formě komentovaných grafů. Dokument mapuje dopravní nehody cyklistů a jejich následky

Diferenciální počet funkcí jedné proměnné

16. února 2015, Brno Připravil: David Procházka

9.2.5 Sčítání pravděpodobností I

GRAFY A GRAFOVÉ ALGORITMY

Sekvenční logické obvody

Funkce rostoucí, funkce klesající I

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

Grafové algoritmy. Programovací techniky

Aritmetika s didaktikou I.

Nyní jste jedním z oněch kouzelníků CÍL: Cílem hry je zničit soupeřovy HERNÍ KOMPONENTY:

Důkazové metody. Teoretická informatika Tomáš Foltýnek

Aplikované úlohy Solid Edge. SPŠSE a VOŠ Liberec. Ing. Aleš Najman [ÚLOHA 18 TVORBA PLOCH]

Řešení: ( x = (1 + 2t, 2 5t, 2 + 3t, t); X = [1, 2, 2, 0] + t(2, 5, 3, 1), přímka v E 4 ; (1, 2, 2, 0), 0, 9 )

Hledáme efektivní řešení úloh na grafu

Jméno autora: Mgr. Zdeněk Chalupský Datum vytvoření: Číslo DUM: VY_32_INOVACE_13_FY_A

Paralelní grafové algoritmy

15 s. Analytická geometrie lineárních útvarů

1. Cizinci v České republice

IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615)

Kapitola I - Množiny bodů daných vlastností I.a Co je množinou všech bodů v rovině, které mají od daných dvou různých bodů stejnou vzdálenost? I.

Jakub Juránek Určete počet kvádru, jejichž velikosti hran jsou přirozená čísla nejvýše rovná deseti. Kolik je v tomto počtu krychlí?

2.7.1 Mocninné funkce s přirozeným mocnitelem

Domácí úkol DU01_2p MAT 4AE, 4AC, 4AI

Algoritmizace prostorových úloh

ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ

Číselné soustavy Ing. M. Kotlíková, Ing. A. Netrvalová Strana 1 (celkem 7) Číselné soustavy

Střední průmyslová škola strojnická Olomouc, tř.17. listopadu 49

SPOLEHLIVOST KONSTRUKCÍ & TEORIE SPOLEHLIVOSTI část 2: Statistika a pravděpodobnost

Zvyšování kvality výuky technických oborů

Úpravy skříní a čelních ploch pro úchopovou lištou

Optika. VIII - Seminář

Každý jednotlivý záznam datového souboru (tzn. řádek) musí být ukončen koncovým znakem záznamu CR + LF.

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

INŽENÝRSKÁ MATEMATIKA LOKÁLNÍ EXTRÉMY

Paradigmata programování 1

MS WORD 2007 Styly a automatické vytvoření obsahu

Cíl hry Cílem hry je získat co nejméně trestných bodů. Každá hra se skládá z deseti kol.

Matice sousednosti NG

Úlohy 22. ročníku Mezinárodní fyzikální olympiády - Havana, Cuba

KONSTRUKČNÍ ÚLOHY ŘEŠENÉ UŽITÍM MNOŽIN BODŮ

PŘÍRUČKA K POUŽÍVÁNÍ APLIKACE HELPDESK

Kvadratické rovnice pro studijní obory

Úvod do teorie grafů

Energetický regulační

IMPORT A EXPORT MODULŮ V PROSTŘEDÍ MOODLE

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

Semestrální práce NÁVRH ÚZKOPÁSMOVÉHO ZESILOVAČE. Daniel Tureček zadání číslo 18 cvičení: sudý týden 14:30

SUPPORT VECTOR MACHINES

Transkript:

Hledání nejkratších cest

Obsah přednášky Úvod Nejkratší cesty z jednoho vrcholu Dijkstrův algoritmus A* algoritmus Bellman-Ford algoritmus Cesty mezi všemi vrcholy Floyd-Warshallův algoritmus Distribuovaný Floyd-Warshallův algoritmus

Vzdálenost v neohodnoceném grafu Pro připomenutí: Délka cesty v neohodnoceném grafu je rovna počtu hran na této cestě. Vzdálenost δ(u, v) vrcholů u, v v grafu je délka nejkratší cesty z u do v. Vzdálenost mezi dvěma vrcholy nemusí být v případě orientovaného grafu symetrická. Obrázek: Vzdálenosti z u do v a naopak se liší.

Vzdálenost v ohodnoceném grafu V reálných aplikacích hledání nejkratších cest jsou hrany grafu obvykle nějakým způsobem ohodnoceny - např. vzdálenosti mezi městy silniční sítě, latence síťových spojů. Definice Délka cesty v ohodnoceném grafu je rovna součtu ohodnocení hran na této cestě. Vzdálenost vrcholů je opět rovna délce nejkratší cesty. Aby měl pojem vzdálenosti smysl, v grafu nemůže existovat cyklus záporné délky.

Nejkratší cesty a cykly Věta Pokud v grafu neexistuje cyklus záporné nebo nulové délky, je nejkratší sled v grafu (nejkratší) cestou. Důkaz. Nechť je součástí sledu s cyklus c. Tento cyklus má zřejmě kladnou délku. Potom existuje sled, který je "podsledem" s a cyklus c je z něj "vystřižen". Jelikož c má kladnou délku, je tento sled kratší než sled c obsahující. Takto lze pokračovat a sled zkracovat, dokud obsahuje nějaké cykly. Výsledný sled, který neobsahuje žádný cyklus, je cestou. Obrázek: Nejkratší sled je vyznačen červeně. Delší sledy vedou i po modrých a zelených hranách a tvoří cykly.

Trojúhelníková nerovnost Graf G splňuje trojúhelníkovou nerovnost, pokud pro libovolnou trojici jeho vrcholů u, v, w platí: δ(u, w) δ(u, v) + δ(v, w) v u d(u,v) d(v,w) w d(u,w) Obecný graf tuto nerovnost nesplňuje. Příkladem, pro který trojúhelníková nerovnost platí, je např. graf nejkratších (nikoliv přímých) silničních vzdáleností mezi městy.

Dijkstrův algoritmus "Klasický" algoritmus hledání nejkratší cesty. Najde nejkratší cesty z jednoho vrcholu do všech ostatních. Pracuje pro orientovaný i neorientovaný graf. Vyžaduje nezáporné ohodnocení všech hran (nejen cyklů). Lineární paměťová složitost. Časová složitost záleží na použité datové struktuře.

Dijkstrův algoritmus popis Počáteční vrchol označíme s. Pro každý vrchol v grafu je udržována hodnota d[v] délka nejkratší doposud nalezené cesty z s do v. Na počátku d[s]= 0 pro počáteční vrchol a d[v]= pro ostatní vrcholy. Po skončení výpočtu obsahuje d[v] délku nejkratší cesty v grafu, pokud taková existuje, nebo v opačném případě. Dále v proměnné p[v] ukládáme předchůdce vrcholu v na doposud nalezené nejkratší cestě z s. Před výpočtem nastavíme hodnotu p[v] jako nedefinovanou pro všechny vrcholy. Po skončení výpočtu je nejkratší cesta posloupnost vrcholů s, p[...p[v]...],... p[p[v]], p[v], v.

Dijkstrův algoritmus popis Všechny vrcholy jsou rozděleny do dvou vzájemně disjunktních množin: S obsahuje právě ty vrcholy, pro něž je v d[v] uložena definitivní nejkratší cesta z s do v v grafu. Q obsahuje všechny ostatní vrcholy. Vrcholy množiny Q jsou ukládány v prioritní frontě. Nejvyšší prioritu má vrchol u s nejnižší hodnotou d[u] nelze do něj již nalézt kratší cestu než která je aktuální. V každé iteraci jsou provedeny následující kroky: Odstraň vrchol u z počátku fronty. Přesuň vrchol u z množiny Q do S. Relaxuj všechny hrany (u, v): Pokud d[v] > d[u] +w(u, v), uprav d[v]. w(u, v) značíme ohodnocení (weight) hrany (u, v).

Dijkstrův algoritmus pseudokód Vycházíme z počátečního vrcholu s. Vlož všechny vrcholy do Q d[s] 0; p[s] undef for all u V \{s} do d[u] p[u] undef end for while Q do Odstraň z Q vrchol u s nejvyšší prioritou for all Hrany (u, v) do if d[v] > d[u] + w(u, v) then d[v] d[u] + w(u, v) p[v] u end if end for end while

Dijkstrův algoritmus příklad Obrázek: Vrcholy množiny S jsou vyznačeny modře. Napravo od grafu je znázorněn stav prioritní fronty.

Dijkstrův algoritmus animace/ilustrace výpočtu animace výpočtu na ukázkovém grafu http://www.unf.edu/~wkloster/foundations/ DijkstraApplet/DijkstraApplet.htm komentovaný výpočet http://www.youtube.com/watch?v=8ls1rqhcopw výpočet s možností definice vlastního grafu http: //www.cse.yorku.ca/~aaw/hfhuang/dijkstrastart.html

Dijkstrův algoritmus časová složitost Označme n = V, m = E. Inicializace je provedena v lineárním čase vzhledem k počtu vrcholů. Každou hranou prochází algoritmus vždy právě jednou nebo dvakrát (v případě neorientovaného grafu). Hlavní cyklus je proveden vždy nkrát. Je tudíž provedeno vždy právě n výběrů z prioritní fronty. Složitost výběru z fronty záleží na její implementaci: Pole, seznam vrcholů výběr lze provést v lineárním čase, složitost celého algoritmu je tedy O(n 2 + m). Binární halda výběr je proveden v čase O(log(n)). Při každé relaxaci hrany může dojít k aktualizaci haldy (O(log(n)), celková složitost je tak rovna O((n + m)log(n)). Fibonacciho halda složitost výběru stejná jako v případě binární haldy, složitost úpravy haldy při relaxaci je ovšem konstantní výsledná složitost algoritmu O(m + nlog(n)). http://en.wikipedia.org/wiki/fibonacci_heap

Dijkstrův algoritmus využití Dijkstrův algoritmus je používán v link-state směrovacích protokolech. Ty pracují na principu zasílání sousedních "vrcholů" aktivními síťovými prvky, které se směrování zúčastní. Každý aktivní prvek periodicky rozesílá seznam sousedních vrcholů. Ten je propagován skrze síť ke všem aktivním prvkům. Každý aktivní prvek nezávisle na ostatních vypočítá strom nejkratších cest do všech ostatních aktivních prvků. Riziko vzniků smyček v routovacích tabulkách. Nejpoužívanější link-state protokoly jsou OSPF a IS-IS. Oba používají Dijkstrův algoritmus.

A* algoritmus Upravený Dijkstrův algoritmus. Používá se zejména k nalezení cesty do jednoho vrcholu např. navigace. Kromě délky nejkratší cesty do každého vrcholu bere při vyhledávání v úvahu i heuristický odhad jeho vzdálenosti od cíle. Každé cestě je přiřazen heuristický odhad délky F jako součet ohodnocení jejích hran G a heuristické ohodnocení koncového vrcholu H. F=G+H Do prioritní fronty nejsou ukládány vrcholy grafu, ale cesty. Nejvyšší prioritu má cesta s nejnižším heuristickým ohodnocením.

A* algoritmus Pro každý vrchol je uloženo, je-li již "uzavřen" či nikoliv, tzn., byl-li již navštíven, prozkoumán odebráním z fronty některé cesty v tomto vrcholu končící. Dijkstrův algoritmus lze použít také k nalezení cesty do jednoho vrcholu grafu. Obvykle ale projde mnoho neperspektivních vrcholů např. při vyhledávání trasy v mapě jde i opačným směrem stejně daleko, jak správným. A* tyto vrcholy eliminuje pomocí heuristiky, je-li vhodně zvolena. Časová složitost záleží na kvalitě zvolené heuristiky nejhůře může být exponenciální, nejlépe polynomiální, a to vůči délce optimální cesty. Paměťová složitost může být v nejhorším případě také exponenciální existuje několik zlepšujících variant algoritmu. Více informací v přednášce doc. Hliněného: http://www.video.muni.cz/public/iti/iti2.avi

A* algoritmus pseudokód Označme počáteční vrchol s, koncový c. Označ všechny vrcholy jako neuzavřené Inicializuj prioritní frontu Q vrcholem (cestou) s while Q do Odstraň cestu p z Q. Nechť x je její koncový vrchol if x je uzavřený then pokračuj další iterací end if if x = c then Vrať cestu p jako výsledek end if Uzavři x for all hrany (x, y) začínající v x do Vlož do fronty cestu p + (x, y) end for end while Vrať zprávu o neexistenci cesty

Bellman-Ford algoritmus Stejně jako Dijkstrův algoritmus vypočítá vzdálenosti všech vrcholů grafu z jednoho zdroje. Základní strukturou podobný Dijkstrovu algoritmu. Graf smí obsahovat i záporně ohodnocené hrany. Cykly s celkovým záporným ohodnocením jsou algoritmem detekovány. Namísto výběru hrany k relaxaci v každé iteraci relaxuje všechny hrany. Vyšší časová složitost než Dijkstrův algoritmus O(mn).

Bellman-Ford pseudokód Proměnné d[v] a p[v] mají stejný význam jako u Dijkstrova algoritmu. Počet vrcholů grafu označme n. d[s] 0; p[s] undef for all vrcholy v grafu vyjma počátečního do d[u] = ; p[u] =nedef. end for for i = 1 n do for all hrany (u, v) do if d[v] > d[u] + w(u, v) then d[v] d[u] + w(u, v), p[v] u end if end for end for for all hrany (u, v) do if d[v] > d[u] + w(u, v) then Chyba: graf obsahuje cyklus neg. váhy end if end for

Bellman-Ford příklad Obrázek: Relaxované hrany v každém kroku jsou vyznačeny modře. Napravo od grafu je vypsána délka nejkratších cest do vrcholů. V poslední (nezobrazené) iteraci již nedojde k žádným změnám. Modře by měly být i hrany (s,a), (s,b) a (s,d) na prvním obrázku.

Bellman-Ford animace/ilustrace výpočtu komentovaná animace výpočtu (česky) http://www.youtube.com/watch?v=lryl6akqphu komentovaná animace výpočtu (anglicky) http://www.csanimated.com/animation.php?t= Bellman-Ford_algorithm

Bellman-Ford aplikace Bellman-Ford algoritmus je používán v druhé třídě směrovacích protokolů distance-vector. Namísto struktury celého grafu jsou mezi aktivními prvky přenášeny jim známé vzdálenosti do ostatních aktivních prvků. Každý aktivní prvek periodicky rozesílá tyto sobě známé vzdálenosti k ostatním. Obdrží-li aktivní prvek tabulku vzdáleností, provede relaxaci hran, případně aktualizuje svoji směrovací tabulku a rozešle svým sousedům. Distance-vector protokoly mají nižší výpočetní složitost než link-state protokoly. Nejznámějšími distance-vector protokoly jsou RIP, BGP, EGP.

Floyd-Warshallův algoritmus Vypočítává nejkratší vzdálenost mezi všemi dvojicemi vrcholů v grafu. Graf může obsahovat záporně ohodnocené hrany, cykly s celkovým záporným ohodnocením vedou k chybnému řešení. Mezi každými dvěma dvojicemi vrcholů postupně vylepšuje nejkratší známou vzdálenost. V každém kroku algoritmu je definována množina vrcholů, kterými je možno nejkratší cesty vést. Každou iterací je do této množiny přidán jeden vrchol. V každé z n iterací jsou aktualizovány cesty mezi všemi n 2 dvojicemi vrcholů. Časová složitost algoritmu je tedy O(n 3 ). Paměťová složitost algoritmu je O(n 2 ).

Floyd-Warshallův algoritmus bližší popis Nechť jsou vrcholy grafu očíslovány 1... n. Nejprve algoritmus uvažuje pouze hrany grafu. Následně prohledává cesty procházející pouze vrcholem 1. Poté cesty procházející pouze vrcholy 1, 2, atd. Mezi každými dvěma vrcholy u, v je v (k + 1)-ní iteraci algoritmu známa cesta využívající vrcholů 1... k. Pro nejkratší cestu mezi těmito vrcholy využívající vrcholů 1... k + 1 jsou dvě možnosti: Vede opět pouze po vrcholech 1... k. Vede po vrcholech 1... k z u do vrcholu k + 1 a z něj poté do v. Na konci výpočtu jsou známy nejkratší cesty využívající všech vrcholů grafu.

Floyd-Warshallův algoritmus pseudokód V matici d na pozici d[i, j] je uložena vypočtená vzdálenost vrcholů i, j. Vstupem je graf v podobě matice sousednosti, kde jednotlivé prvky značí ohodnocení hrany nebo for all k = 1 n do for all i = 1 n do for all j = 1 n do d[i, j] min(d[i, j], d[i, k] + d[k, j]) end for end for end for

Floyd-Warshallův algoritmus příklad Obrázek: Vrcholy, kterými mohou vést cesty, jsou vyznačeny. Matice udává nejkratší nalezené vzdálenosti mezi dvojicemi vrcholů.

Distribuovaný Floyd-Warshall Výhodou Floyd-Warshallova algoritmu je jeho snadná aplikace v distribuovaném prostředí mezi autonomními jednotkami, které si mohou informace předávat jen pomocí zasílání zpráv po síti. Každý vrchol grafu vypočítává nejkratší cesty do všech ostatních vrcholů grafu. Na začátku zná každý vrchol jen cestu do svých sousedů. Stejně jako v sekvenční variantě algoritmu, každá iterace algoritmu přidává jeden vrchol, kterým mohou procházet hledané nejkratší cesty. Přidaný vrchol v každé iteraci rozešle svoji tabulku vzdáleností ostatním vrcholům grafu. Ostatní vrcholy pomocí své a přijaté tabulky aktualizují nejkratší cesty do všech vrcholů.

Distribuovaný Floyd-Warshall pseudokód Algoritmus je spuštěn ve vrcholu u. Inicializace: d[u] 0; p[u] nedef for all v V \{u} do if Existuje hrana (u, v) then d[v] w(u, v); p[v] u else d[v] ; p[v] nedef end if end for Hlavní cyklus: while nebyly vybrány všechny vrcholy do Vyber doposud nevybraný vrchol v if u = v then Rozešli ostatním vrcholům pole d else Přijmi od vrcholu v jeho pole d end if for all w V do d[w] min(d[w], d[v] + d [w]) uprav p[v] end for end while

Distribuovaný Floyd-Warshall Pro správnost algoritmu je nutné, aby všechny výpočetní uzly (vrcholy grafu) vybraly vždy stejný vrchol, který poté rozesílá svoji tabulku vzdáleností. Algoritmus je neefektivní z hlediska množství zasílaných dat. Pokud v některém vrcholu platí d[v]= pro právě vybraný vrchol v, jeho cesty se nijak neupraví a nemusí mu tedy být zasílána tabulka vzdáleností tohoto vrcholu. Před rozesláním tabulky vzdáleností se mohou vrcholy vzájemně informovat, které mají obdržet tuto tabulku s výrazně nižšími nároky na přenesená data Touegův algoritmus. Další informace: Ajay D. Kshemkalyani, Mukesh Singhal. Distributed Computing: Principles, Algorithms, and Systems. Cambridge University Press, 2008. Str. 151-155

Cvičení 1 Na grafu níže vypočítejte nejkratší cesty použitím Dijkstrova, Bellman-Fordova a Floyd-Warshallova algoritmu. V případě prvních dvou použijte různé počáteční vrcholy. 2 Navrhněte způsob implementace nastíněného vylepšení distribuovaného Floyd-Warshallova algoritmu. Uvažujte, že výpočetní uzly mohou zasílat zprávy jen po hranách grafu (broadcasting je implementován přeposíláním zpráv mezi uzly).

Cvičení 3 Proč nepracuje Dijkstrův algoritmus korektně na grafech obsahujících záporně ohodnocené hrany? K jakým výsledkům může dojít, je-li na takovém grafu spuštěn? 4 Nechť vstupem Bellman-Fordova algoritmu je graf, v němž každá nejkratší cesta obsahuje nejvýše k hran. Navrhněte úpravu algoritmu umožňující ukončit výpočet po k + 1 iteracích.