Dijkstrův algoritmus

Popis algoritmu

 

Dijkstrův algoritmus je algoritmus sloužící k nalezení nejkratší cesty v grafu. Je konečný (pro jakýkoliv konečný vstup algoritmus skončí), protože v každém průchodu cyklu se do množiny navštívených uzlů přidá právě jeden uzel, průchodů cyklem je tedy nejvýše tolik, kolik má graf vrcholů. Funguje nad hranově kladně ohodnoceným grafem (neohodnocený graf lze však na ohodnocený snadno převést). Pro grafy s hranami se záporným ohodnocením se obvykle používá pomalejší Bellmanův-Fordův algoritmus.

Algoritmus poprvé popsal nizozemský informatik Edsger Dijkstra.

 

Popis algoritmu

Mějme graf G, v němž hledáme nejkratší cestu. Řekněme, že V je množina všech vrcholů grafu G a množina E obsahuje všechny hrany grafu G. Algoritmus pracuje tak, že si pro každý vrchol v z V pamatuje délku nejkratší cesty, kterou se k němu dá dostat. Označme tuto hodnotu jako d[v]. Na začátku mají všechny vrcholy v hodnotu d[v]=∞, kromě počátečního vrcholu s, který má d[s]=0. Nekonečno symbolizuje, že neznáme cestu k vrcholu.

Dále si algoritmus udržuje množiny Z a N, kde Z obsahuje už navštívené vrcholy a N dosud nenavštívené. Algoritmus pracuje v cyklu tak dlouho, dokud N není prázdná. V každém průchodu cyklu se přidá jeden vrchol vmin z N do Z, a to takový, který má nejmenší hodnotu d[v] ze všech vrcholů v z N.

Pro každý vrchol u, do kterého vede hrana (označme její délku jako l(vmin,u)) z vmin, se provede následující operace: pokud (d[vmin] + l(vmin,u)) < d[u], pak do d[u] přiřaď hodnotu d[vmin] + l(vmin,u), jinak neprováděj nic.

Až algoritmus skončí, potom pro každý vrchol v z V je délka jeho nejkratší cesty od počátečního vrcholu s uložena v d[v].

 

 

Dijkstr%C5%AFv algoritmus. In Wikipedia : the free encyclopedia [online]. St. Petersburg (Florida) : Wikipedia Foundation, 25.06.2006, last modified on 01.09.2010 [cit. 2011-03-22]. Dostupné z WWW: https://cs.wikipedia.org/wiki/Dijkstr%C5%AFv_algoritmus.

Vyhledávání

© 2011 Všechna práva vyhrazena.