Přejít na obsah messages.homepage.accessibility

Dijkstrův algoritmus

1. Popis standardní metody algoritmu

Dijkstrův algoritmus slouží k vyhledání nejkratší cesty z iniciálního uzlu A do všech ostatních uzlů grafu. Pracujeme s váženým neorientovaným grafem G = (V, E, w), kde V je množina vrcholů, E je množina neorientovaných hran a w je ohodnocení hran. Na počátku algoritmu vložíme do návěští iniciálního uzlu A hodnotu "A/0", do návěští ostatních uzlů X, jejichž vzdálenost od A zatím neznáme, zapíšeme "X/\infty". Ukázku takového grafu nabízíme na Obrázku 1.

Příklad 1: Neorientovaný graf G
Obrázek 1: Neorientovaný graf G o šesti uzlech, jehož hrany jsou ohodnoceny kladným reálným číslem

Opakovaně provádíme následující tři kroky, dokud nezpracujeme všechny vrcholy:

  1. Mezi nezpracovanými vrcholy najdeme uzel "X/n" s nejmenší vzdáleností n od iniciálního V.
  2. Pro každou hranu e vedoucí z uzlu "X/n" do nezpracovaného vrcholu "Y/m" provedeme následující:
    1. je-li m > n + w(e), změníme aktuální vzdálenost uzlu Y od iniciálního uzlu na m = n + w(e),
    2. v opačném případě ponecháme návěští uzlu Y beze změny.
  3. Označíme uzel X jako zpracovaný.

Při aplikaci Dijkstrova algoritmu měníme pouze návěští vrcholů. Aktualizujeme jejich aktuální vzdálenost od iniciálního uzlu, nebo je označujeme za zpracované. Pro názornost uvádíme i konkrétní příklad neorientovaného grafu a Animaci 1 naznačující výpočet nejkratších vzdáleností od iniciálního uzlu pomocí Dijkstrova algoritmu.

Příklad 2: Neorientovaný graf G
  • https://www.teiresias.muni.cz/amalg/www/images/animation/Dijkstra/Shortest_path_inv24_1.jpg
  • Počátek algoritmu
    A/0 B/ \infty C/ \infty D/ \infty E/ \infty F/ \infty
Animace 1: Výpočet nejkratších vzdáleností pomocí Dijkstrova algoritmu

2. Návrh možných adaptací

3. Diskuze nad výhodami a nevýhodami