dijkstruv_algoritmus
Obsah
Dijkstrův algoritmus
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.
1. Jak algoritmus funguje?
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.
2. Vlastnosti a omezení
- Optimálnost: Algoritmus vždy najde nejkratší cestu, pokud existuje.
- Omezení (Nezáporné váhy): Funguje pouze v grafech, kde jsou váhy hran kladné (např. vzdálenost v km, čas v minutách). Pokud by graf obsahoval záporné váhy (např. cesta, která vám „vydělává“ energii), algoritmus by selhal (v takovém případě se používá Bellman-Fordův algoritmus).
- Složitost: Při použití efektivních datových struktur (prioritní fronta) je složitost $O((E + V) \log V)$, kde $V$ je počet vrcholů a $E$ počet hran.
3. Praktické využití
- GPS a Mapy: Výpočet nejrychlejší trasy z bodu A do bodu B v silniční síti.
- Počítačové sítě (Routing): Protokoly jako OSPF (Open Shortest Path First) používají Dijkstru k nalezení nejlepší cesty pro data v internetu.
- Logistika: Plánování rozvozu zboží tak, aby se najelo co nejméně kilometrů.
- Hry: Pohled (Pathfinding) nehráčských postav (NPC) k cíli.
4. Srovnání: Dijkstra vs. Ostatní
| 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.
dijkstruv_algoritmus.txt · Poslední úprava: autor: admin
