Hledání nejkratší cesty a Dijkstrův algoritmus
- Dijkstrův algoritmus je jeden z nejznámějších algoritmů hledání nejkratší cesty
- Na vstupu: je neorientovaný graf , jeho hranové ohodnocení a vrchol
- Výstupem: pro každý vrchol číslo , které je vzdáleností z do .
- Algoritmus používá proměnné: ,
- a označují množiny vrcholů
- označuje funkci přiřazující vrcholům kladná reálná čísla
- označuje nezáporné reálné číslo.
- V každém kroku algoritmu je pro vrchol hodnota rovna délce nejkratší zatím nalezené cesty z do .
- Na začátku se nastaví a pro ostatní vrcholy .
- Hodnota znamená, že žádná cesta do zatím nebyla nalezena. Tato hodnota se pak u vrcholů, do kterých existuje cesta z , v průběhu výpočtu zmenšuje, v každém kroku obsahuje délku nejkratší zatím nalezené cesty z do , a na konci délku nejkratší cesty z do .
- U vrcholů , do kterých cesta z nevede, zůstává .
- Množina se na začátku nastaví na . Během výpočtu obsahuje vrcholy , pro něž zatím nebyla stanovena konečná hodnota (tj. byla stanovena, ale v dalším výpočtu se ještě může změnit).
- Algoritmus opakuje následující kroky:
- Zjistí nejmenší hodnotu vrcholů z . Množinu vrcholů z s touto nejmenší hodnotou označí . Z množiny vyjme všechny vrcholy , pro které je nejmenší.
- Vrchol se tedy odstraní z a vloží do , právě když .
- Každý takový vrchol je pak považován za vrchol, pro nějž byla nalezena nejkratší cesta z do , délkou této cesty je , a kratší cesta do se v dalších krocích algoritmu už nehledá (to je zajištěno tím, že se vrchol odstranil z ).
- Vložení vrcholu do znamená, že je považován za vrchol, přes který může do zbývajících vrcholů množiny vést kratší cesta, než je dosud nalezená nejkratší cesta do . V tomto smyslu je tedy každý vrchol z kandidátem na zlepšení hodnoty .
- Algoritmus toto možné zlepšení prověří pro vrcholy z , do kterých vede z hrana. Algoritmus tedy pro každý a pro každý , pro který existuje hrana , porovná hodnotu (délka možné cesty z s do u, která vede přes v) s hodnotou (délka dosud nejkratší nalezené cesty z do ).
- Je-li (tj. cesta přes v je kratší), změní se hodnota .
- Algoritmus se pak vrátí ke kroku 2. V něm se ověří, zda je v ještě nějaký vrchol s hodnotou . Pokud ano, znamená to, že v se nacházejí kandidáti na zlepšení hodnot a pokračuje se znovu jako výše, tedy stanovením nové množiny , odebráním vrcholů z a tak dále. Pokud ale v žádný vrchol s hodnotou není, algoritmus skončí.
- Na konci je množina buď prázdná, a to tehdy, když ke všem vrcholům z cesta existuje, nebo je neprázdná, a obsahuje jen vrcholy s hodnotou . Vrcholy s hodnotou jsou právě ty, ke kterým z s neexistuje cesta.
- Zjistí nejmenší hodnotu vrcholů z . Množinu vrcholů z s touto nejmenší hodnotou označí . Z množiny vyjme všechny vrcholy , pro které je nejmenší.
Algoritmus
- Vstup: Graf , vrchol , hranové ohodnocení
- Výstup: Hodnota pro každý , je délka nejkratší cesty z do
- Proměnné: Funkce , číslo , množiny
- Postup:
- ; pro každý
- Pokud neexistuje takový, že , skonči
- Pro všechny takové, že jestliže pak pokračuj krokem
Navigace
Předchozí: Orientované a neorientované grafy, základní pojmy Následující: Minimální kostra grafu, Kruskalův algoritmus Celý okruh: 1. Teoretické základy informačních technologií