Diplomová práce, MFF UK
Lukáš Jirovský
Matematika - MIUZV
Hledání nejkratší cesty je jedním ze základních problémů teorie grafů - podobné algoritmy se používají např. v plánovačích tras v GPS nebo v jízdních řádech.
Mějme souvislý graf s metrikou. Tím jsme získali "mapu" (víme, odkud a kam vedou silnice a jak jsou dlouhé) - jediné informace, které algoritmus potřebuje.
Jedním z algoritmů pro hledání nejkratší cesty je Floyd-Warshallův algoritmus. Jeho výhodou je velmi snadné použití.
Algoritmus postupně projde všechy možnosti cest mezi každými dvěma městy a pokud zjistí, že cesta přes třetí město by byla kratší, použije ji.
Vzdálenost(A,B) = min(Vzdálenost(A,B), Vzdálenost(A,C)+Vzdálenost(C,B)).
Užitečnou vlastností tohoto algoritmu je také, že najde vzdálenost mezi každými dvěma městy (i pokud mezi nimi původně nevedla přímá silnice).
Podobně jako u matice sousednosti v počítači použijeme dvourozměrné pole. Mezi městy, která nejsou spojena silnicí, je použita vysoká konstanta představující nekonečno (v konkrétním případě 999, konstanta musí být dostatečně vysoké číslo, často se používá součet délek silnic + 1); mezi městy, která silnicí spojeny nejsou, bude v matici (poli) uložená délka cesty.
Samotný algoritmus je vlastně užití standardní funkce minimum ze dvou čísel spuštěné ve třech for cyklech v sobě.
Velkým problémem tohoto algoritmu je ovšem jeho výpočetní složitost - s tím, jak roste počet vrcholů, mezi kterými vzdálenost počítáme, roste počet kroků algoritmu podobně jako graf funkce y = x3.
Jedním z lépe použitelných algoritmů je Dijkstrův algoritmus. Dosahuje rychlejšího výpočtu, samotná implementace je ovšem náročnější než u Floyd-Warshallova algoritmu.
Výpočetní náročnost algoritmů podle velikosti vstupních dat se v informatice zkoumá pomocí tzv. (časové) složitosti algoritmu (viz [9]).