Floydův algoritmus
Floydův algoritmus slouží především k vyhledání vzdáleností (vzdálenost = délka minimální cesty) v ohodnocených grafech. Algoritmus je založen na porovnání hodnot přímých a nepřímých vzdáleností. Využíváme toho, že hrana
patří do minimální cesty tehdy, pokud nevede minimální cesta jinudy. Zapsáno matematicky:
![](http://is.muni.cz/system/tex2img?code=d%28i%2Cj%29%2Bo%28i%2Cj%29%3Cd%28r%2Cj%29)
Floydův algoritmus je tvořen z následujícími kroky:
- Sestavení matice přímých vzdáleností
přičemž pro prvky
této matice platí:
pokud ![](http://is.muni.cz/system/tex2img?code=i%3Dj%2C)
pokud
a hrana spojující uzly
existuje,
pokud
a hrana spojující uzly
neexistuje.
- Zavedeme pomocnou proměnnou
a položíme
Tato proměnná představuje index vrcholu, pře který provádíme přepočet.
- Provedeme přepočet jednotlivých prvků
matice
podle pravidla
přičemž nepropočítáváme prvky matice, pro které platí
(hlavní diagonála matice), prvky, pro které platí
(leží v řádku či sloupci s indexem
), a prvky
a
pro které
a ![](http://is.muni.cz/system/tex2img?code=c_%7Bkj%7D%3D%5Cinfty.)
- Pokud
(
je počet vrcholů grafu), potom položíme
a vracíme se zpět ke kroku 3). Je – li
je výpočet ukončen a poslední získaná matice je hledanou maticí vzdáleností.
Příklad: V zadaném grafu nalezněte vzdálenosti mezi jednotlivými vrcholy pomocí Floydova algoritmu.
Řešení:
|
A
|
B
|
C
|
D
|
A
|
0
|
|
![](http://is.muni.cz/system/tex2img?code=%5Cinfty)
|
![](http://is.muni.cz/system/tex2img?code=%5Cinfty)
|
B
|
3
|
0
|
![](http://is.muni.cz/system/tex2img?code=%5Cinfty)
|
7
|
C
|
3
|
2
|
0
|
![](http://is.muni.cz/system/tex2img?code=%5Cinfty)
|
D
|
![](http://is.muni.cz/system/tex2img?code=%5Cinfty)
|
![](http://is.muni.cz/system/tex2img?code=%5Cinfty)
|
4
|
0
|
|
K=1
|
A
|
B
|
C
|
D
|
A
|
0
|
![](http://is.muni.cz/system/tex2img?code=%5Cinfty)
|
![](http://is.muni.cz/system/tex2img?code=%5Cinfty)
|
![](http://is.muni.cz/system/tex2img?code=%5Cinfty)
|
B
|
3
|
0
|
![](http://is.muni.cz/system/tex2img?code=%5Cinfty)
|
7
|
C
|
3
|
2
|
0
|
![](http://is.muni.cz/system/tex2img?code=%5Cinfty)
|
D
|
![](http://is.muni.cz/system/tex2img?code=%5Cinfty)
|
![](http://is.muni.cz/system/tex2img?code=%5Cinfty)
|
4
|
0
|
|
|
K=2
|
A
|
B
|
C
|
D
|
A
|
0
|
![](http://is.muni.cz/system/tex2img?code=%5Cinfty)
|
![](http://is.muni.cz/system/tex2img?code=%5Cinfty)
|
![](http://is.muni.cz/system/tex2img?code=%5Cinfty)
|
B
|
3
|
0
|
![](http://is.muni.cz/system/tex2img?code=%5Cinfty)
|
7
|
C
|
3
|
2
|
0
|
9
|
D
|
![](http://is.muni.cz/system/tex2img?code=%5Cinfty)
|
![](http://is.muni.cz/system/tex2img?code=%5Cinfty)
|
4
|
0
|
|
|
K=3
|
A
|
B
|
C
|
D
|
A
|
0
|
![](http://is.muni.cz/system/tex2img?code=%5Cinfty)
|
![](http://is.muni.cz/system/tex2img?code=%5Cinfty)
|
![](http://is.muni.cz/system/tex2img?code=%5Cinfty)
|
B
|
3
|
0
|
![](http://is.muni.cz/system/tex2img?code=%5Cinfty)
|
7
|
C
|
3
|
2
|
0
|
9
|
D
|
7
|
6
|
4
|
0
|
|