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

Podobné dokumenty
Algoritmus pro generování normálních magických čtverců

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

Vzdálenost uzlů v neorientovaném grafu

Grafové algoritmy. Programovací techniky

Algoritmizace prostorových úloh

TGH06 - Hledání nejkratší cesty

Dijkstrův algoritmus

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

Grafové algoritmy. Programovací techniky

Stromy, haldy, prioritní fronty

Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly.

Algoritmy na ohodnoceném grafu

Úvod do teorie grafů

TGH06 - Hledání nejkratší cesty

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

Paralelní grafové algoritmy

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

4EK311 Operační výzkum. 5. Teorie grafů

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

3. Třídy P a NP. Model výpočtu: Turingův stroj Rozhodovací problémy: třídy P a NP Optimalizační problémy: třídy PO a NPO MI-PAA

Základy informatiky. Teorie grafů. Zpracoval: Pavel Děrgel Úprava: Daniela Szturcová

Zdůvodněte, proč funkce n lg(n) roste alespoň stejně rychle nebo rychleji než než funkce lg(n!). Symbolem lg značíme logaritmus o základu 2.

bfs, dfs, fronta, zásobník, prioritní fronta, halda

Učební texty k státní bakalářské zkoušce Matematika Základy lineárního programování. študenti MFF 15. augusta 2008

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

1 0 0 u 22 u 23 l 31. l u11

1 Linearní prostory nad komplexními čísly

Úloha - rozpoznávání číslic

ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ

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

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

Dynamické programování

HEURISTICKÉ ALGORITMY PRO ŘEŠENÍ ÚLOH OBCHODNÍHO CESTUJÍCÍHO

Dynamické programování

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

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

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012

bfs, dfs, fronta, zásobník, prioritní fronta, halda

TGH10 - Maximální toky

Kolik existuje různých stromů na pevně dané n-prvkové množině vrcholů?

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

P 1 = P 1 1 = P 1, P 1 2 =

Použití dalších heuristik

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

Polynomy. Mgr. Veronika Švandová a Mgr. Zdeněk Kříž, Ph. D. 1.1 Teorie Zavedení polynomů Operace s polynomy...

Ohodnocené orientované grafy

VYUŽITÍ FLOYDOVA ALGORITMU NA SITÍCH USE OF FLOYD ALGORITHM IN NETWORKS

úloh pro ODR jednokrokové metody

= 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

Lineární programování

Optimalizace. Obsah přednášky. DÚ LP - Okružní problém. Lineární optimalizace. DÚ LP - Okružní problém. DÚ LP - Okružní problém

Zdrojem většiny příkladů je sbírka úloh 1. cvičení ( ) 2. cvičení ( )

Převoditelnost problémů nezávislé množiny na problém hamiltonovského cyklu () IS HC 1/10

TEORIE GRAFŮ TEORIE GRAFŮ 1

TGH12 - Problém za milion dolarů

Metody síťové analýzy

TOKY V SÍTÍCH II. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Přiřazovací problém. Přednáška č. 7

1 Diference a diferenční rovnice

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:

SOUSTAVY LINEÁRNÍCH ALGEBRAICKÝCH ROVNIC

Dokumentace k semestrální práci z předmětu PT

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

1 Projekce a projektory

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Drsná matematika III 10. demonstrovaná cvičení Kostry grafů

Příklad 1/23. Pro rostoucí spojité fukce f(x), g(x) platí f(x) Ω(g(x)). Z toho plyne, že: a) f(x) Ο(g(x)) b) f(x) Θ(g(x)) d) g(x) Ω(f(x))

Algoritmy a datové struktury

0.1 Úvod do lineární algebry

8 Přednáška z

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

2. Složitost, grafové algoritmy (zapsal Martin Koutecký)

Řízení projektů. Konstrukce síťového grafu pro řízení projektů Metoda CPM Metoda PERT

4EK213 LINEÁRNÍ MODELY

Minimalizace KA - Úvod

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

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

07 Základní pojmy teorie grafů

6. Tahy / Kostry / Nejkratší cesty

Princip řešení soustavy rovnic

0.1 Úvod do lineární algebry

Matematika (CŽV Kadaň) aneb Úvod do lineární algebry Matice a soustavy rovnic

Metody analýzy kritické cesty

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

Graf. Uzly Lokality, servery Osoby fyzické i právní Informatické objekty... atd. Hrany Cesty, propojení Vztahy Informatické závislosti... atd.

Teorie grafů. zadání úloh. letní semestr 2008/2009. Poslední aktualizace: 19. května First Prev Next Last Go Back Full Screen Close Quit

dag a dp v něm, bellman-ford, floyd-warshall

ALGORITMY A DATOVÉ STRUKTURY

3. Prohledávání grafů

3. Grafy a matice. Definice 3.2. Čtvercová matice A se nazývá rozložitelná, lze-li ji napsat ve tvaru A =

MS EXCEL 2010 ÚLOHY. Vytvořte tabulku podle obrázku, která bude provádět základní matematické operace se dvěma zadanými čísly a a b.

4. Kombinatorika a matice

NP-úplnost problému SAT

Jarníkův algoritmus. Obsah. Popis

Usuzování za neurčitosti

Složitost Filip Hlásek

Matice. a m1 a m2... a mn

Cílem seminární práce je aplikace teoretických znalostí z přednášky na konkrétní úlohy. Podstatu algoritmu totiž

Cílem této kapitoly je uvedení pojmu matice a jejich speciálních typů. Čtenář se seznámí se základními vlastnostmi matic a s operacemi s maticemi

Nejdřív spočítáme jeden příklad na variaci konstant pro lineární diferenciální rovnici 2. řádu s kostantními koeficienty. y + y = 4 sin t.

Transkript:

1.1 Úvod Algoritmus pro hledání nejkratší cesty orientovaným grafem Naprogramoval jsem v Matlabu funkci, která dokáže určit nejkratší cestu v orientovaném grafu mezi libovolnými dvěma vrcholy. Nastudoval jsem si postupně Dijkstrův a Floydův-Warshallův algoritmus pro hledání cesty v grafu s ohodnocenými hranami a uvážil, že v Matlabu se bude lépe implementovat ten druhý, protože více využívá operace s maticemi, které jsou pro Matlab přirozené. 1.2 Teorie Pro maticovou reprezentaci orientovaného grafu se často používá tzv. matice vzdáleností. Tato matice má rozměry, kde n je celkový počet vrcholů v grafu. Pro jednoduchost budeme předpokládat, že máme jednotlivé vrcholy v grafu očíslované pomocí prvků z množiny * +. V této matici víme, že na pozici (i, j) bude pro buď kladné reálné číslo, nebo nekonečno. Kladné reálné číslo v matici říká, že v grafu existuje hrana z vrcholu i do vrcholu j a jeho hodnota udává přímou vzdálenost z vrcholu i do vrcholu j. Na pozici bude vždy 0, protože předpokládáme, že vzdálenost vrcholu od něj samého je rovna 0. Na základě slovního popisu bychom mohli zkonstruovat následující definici: Nechť je dán orientovaný graf G s vrcholy V =* + a nechť. Potom matici A nazvu matici vzdáleností, pokud * + * + platí, že A(i,j) = 0, pokud i = j A(i,j) = r, pokud vede hrana z i do j a její ohodnocení je rovno r A(i,j) =, jinak S takovou maticí bude muset umět funkce pracovat. Floydův-Warshallův algoritmus funguje takzvaně iteračně, což znamená, že pracuje po jednotlivých krocích, kde se při každém opakování stejného kroku více přiblíží finálnímu řešení. Ukažme si to na následujícím příkladu, kde budeme mít zadaný následující graf a jeho matici vzdáleností A: 1

Pro takový graf bude vypadat matice vzdáleností: 1 0 3 2 0 2 3 3 4 1 1 4 5 6 V každém kroku algoritmu budeme hledat, jestli neexistuje cesta mezi dvěma vrcholy ještě přes nějaký další vrchol. To by obecně znamenalo, že pokud budeme hledat cestu mezi i a j v k-té iteraci, hledáme alternativní cestu přes dalších k vrcholů. Matice se v jedné iteraci s iteračním indexem k přepočítá dle následujícího schématu: A(i,j) =inf{a(i,j), inf * ( ) ( ) ( ) ( ) ( ) ( )+} To se dá také zapsat, že budeme procházet všechna * + a budeme hledat min A(i,j) = inf{a(i,j) ; inf * ( ) ( ) * +++ Toto je nutné udělat pro všechny prvky (i,j) z matice A. Otázkou ještě je, kolikrát musíme tento přepočet provést, tj. kolik iterací program projde tak, aby úloha dospěla ke svému řešení. Je dokázáno, že výpočet je nutné provádět, dokud počet iterací k splňuje následující podmínku: kde n je celkový počet vrcholů Například prvek na pozici (3,4) přepočítáme v první iteraci (k=1) následovně: 1 0 3 2 0 2 3 0 3 4 1 1 0 5 6 0 A(3,4) = inf{ ;inf{,,,,9}}=inf{ ;9}=9 Pokud bychom tento postup aplikovali na všechna (i,j) dostaneme tabulku: 1 0 3 5 2 0 2 5 3 0 9 3 4 1 4 1 0 4 5 7 7 6 0 2

Vidíme například, že již po prvním kroku se dá dostat z vrcholu 4 do všech ostatních vrcholů. Nelze však tvrdit, že tyto cesty jsou nejkratší, protože by mohl existovat vrchol, přes který by se cesta mohla ještě dále zkrátit. Matice v konečné fázi výpočtu (tj. pro k=3, protože n=6 a 2 4-1 >6) vypadá následovně: 1 0 3 5 14 8 2 12 0 2 11 5 3 10 13 0 9 3 4 1 4 1 0 4 5 7 10 7 6 0 Výstupem funkce je nejen tato matice R, ale také druhá matice M, která udává, jakým způsobem se lze dostat z vrcholu i do vrcholu j. Na pozici M(i,j) je 0, pokud je i=j nebo vede orientovaná hrana z vrcholu i do vrcholu j, na pozici M(i,j) je r * +, pokud cesta mezi i a j vede přes vrchol r. Pro náš příklad vypadá matice M následovně: 1 0 3 2 3 2 2 5 0 0 3 3 3 4 4 4 5 0 4 0 1 0 0 3 5 4 1 4 0 3 Můžeme z ní vyčíst, přes jaké vrcholy vede nejkratší cesta z vrcholu i do vrcholu j. Př. Jaká je nejkratší cesta z vrcholu 3 do vrcholu 4? Protože M(3,4) = 5, vede přes vrchol 5, zároveň M(3,5) = M(5,4) = 0, což znamená, že posloupnost orientovaných hran 3 5 4 je hledanou nejkratší cestou. Tímto způsobem je možné jednoduše odečíst délku cesty mezi vrcholem i a j z matice R, a posloupnost vrcholů, kterými se prochází, z matice M. 1.3 Program Funkce na vstupu dostane matici vzdáleností a pomocí Floydova-Warshallova algoritmu vypočítá matici R nejkratších vzdáleností mezi zadanými vrcholy, a určí také zmíněnou matici M. Počet iterací k nikdy nepřekročí hodnotu. To je také podmínka v cyklu while, který určuje, jestli je již výpočet ukončen, nebo ne. 3

function [R,M] = FloydW(A) %spočítá na základě matice vzdáleností nejkratší cestu mezi všemi uzly grafu % na začátku zjistíme počet vrcholů, dozvíme se ho z rozměru tabulky n = size(a,1); % iterační index nastavíme na hodnotu 1 k=1; %pro výstupní matice M a R vytvoříme místo v paměti ze znalosti počtu vrcholů R = zeros(n,n); M = zeros(n,n); while (exp((k-1)*log(2)) < n) % dokud není splněna podmínka o maximálním počtu iterací for i=1:n for j=1:n s = A(i,j); index = 0; for l = 1:n % pro každý řádek % pro každý sloupec % hodnota, která se bude zlepšovat % uchová index, ve kterém se našlo minimum % pro každou dvojici ve dvou sloupcích if (A(i,l)~=inf)&&(A(l,j)~=inf) if s > (A(i,l)+A(l,j)) % pokud jsme našli lepší hodnotu cesty z i do j přes % k+1 vrcholů s = A(i,l)+A(l,j); index = l; R(i,j) = s; % konstruujeme matici R po prvcích if index~=0 %pokud bylo nalezeno reálné minimum, existuje cesta o délce k+1 M(i,j) = index; k = k+1; A = R; % zvýšíme iterační index % v dalším kroku budeme počítat již s novou maticí R = A; for i=1:n R(i,i)=0; 4

1.4 Výstupy na obrazovku pro různé vstupy Pro naše zadání, které sloužilo jako příklad v teorii, vypadá graf následovně: Jeho matice vzdáleností: Výstup do konzole vypadá následovně: 5

Jiný příklad, náš graf bude vypadat následovně: Jeho matice vzdáleností: Výstup do konzole vypadá následovně: 6

1.5 Závěr Podařilo se mi naprogramovat funkci, která by měla najít nejkratší cestu mezi všemi vrcholy v orientovaném grafu. Jak jsem již zmiňoval v úvodu, bylo vhodné použít právě Floyd-Warshallův algoritmus, i kvůli tomu, že často prohledáváme všechny prvky matice a ve vstupu i výstupu se nachází také matice. Výhodou oproti ostatním algoritmům může být, že známe přesný počet kroků již ze zadání, tudíž můžeme hned odhadnout, jak složitý výpočet bude. Složitost takového algoritmu při zadání n prvků s předpokládaným počtem iterací je úměrná ( ) ) ( ). Tato o trochu vyšší složitost než u Dijkstrova algoritmu (která je ( ) je však vyvážena faktem, že Floyd-Warshall je univerzálnější - v případě potřeby spočítá nejkratší cestu i v grafu se záporným ohodnocením hran. 1.6 Reference [1] http://kam.mff.cuni.cz/~kuba/ka/min_cesta.pdf [2] http://www.pms.ifi.lmu.de/lehre/compgeometry/gosper/shortest_path/shortest_path.html [3] http://stackoverflow.com/questions/4212431/dijkstra-vs-floyd-warshall-finding-optimalroute-on-all-node-pairs [4] http://www.algoritmy.net/article/36597/nejkratsi-cesta 7