Dijkstrův algoritmus řeší problém hledání nejkratší cesty v grafu s nezápornými vahami hran. Je to základní stavební kámen moderních navigačních systémů (GPS) a směrovacích protokolů v počítačových sítích.
Algoritmus využívá strategii „hladového vyhledávání“ (greedy algorithm). Postupuje následovně:
1. **Inicializace:** Startovnímu uzlu přiřadí vzdálenost 0, všem ostatním uzlům nekonečno ($\infty$). Všechny uzly jsou označeny jako "nenavštívené". 2. **Výběr:** Vybere nenavštívený uzel s aktuálně nejmenší vzdáleností od startu (na začátku je to startovní uzel). 3. **Relaxace hran:** U všech sousedů tohoto uzlu spočítá novou potenciální vzdálenost: //"Pokud půjdu přes tento uzel, bude cesta ke sousedovi kratší než ta, kterou znám doteď?"// 4. **Aktualizace:** Pokud je nová cesta kratší, přepíše původní hodnotu u souseda na tuto novou, nižší hodnotu. 5. **Ukončení:** Jakmile jsou prozkoumáni všichni sousedi vybraného uzlu, uzel se označí jako "navštívený" a algoritmus se vrací ke kroku 2, dokud neprojde celý graf.
| Algoritmus | Typ grafu | Výsledek |
|---|---|---|
| BFS | Neohodnocený (váhy jsou 1) | Nejkratší cesta v počtu kroků. |
| Dijkstra | Ohodnocený (kladné váhy) | Nejkratší cesta v součtu vah. |
| A* | Ohodnocený + heuristika | Rychlejší hledání směrem k cíli (používá se ve hrách). |
[Image comparing Dijkstra (expanding in circles) and A* (expanding towards target)]
Zajímavost: Edsger Dijkstra prý vymyslel tento algoritmus během 20 minut, když seděl se svou snoubenkou v kavárně. Chtěl ukázat schopnosti nového počítače ARMAC a hledal problém, kterému by rozuměli i lidé mimo obor informatiky – vybral si tedy mapu nizozemských měst.