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.

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:
    1. ; pro každý
    2. Pokud neexistuje takový, že , skonči
    3. Pro všechny takové, že jestliže pak pokračuj krokem

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í