2. http://lynt.cz
Dijskrův algoritmus
23. 1. 2015 2
• Dijskrův algoritmus počítá nejkratší cestu mezi
2 místy v grafu
• Budeme potřebovat 2 tabulky a samotný graf
• V první tabulce budeme evidovat celkové
nejkratší vzdálenosti mezi místy
• V druhé místa, odkud jsme se sem nalezenou
nejkratší cestou dostali
3. http://lynt.cz
Hledáme nejlepší cestu
z města A do města F
23. 1. 2015 3
A
B
C
D
E F
1 km 4 km
2 km
4 km 1 km
2 km
1 km 2 km
A B C D E F A B C D E F
Nejkratší cesta do okolních měst Jak jsem se do města dostal
4 km
4. http://lynt.cz
Hledáme nejlepší cestu
z města A do města F
23. 1. 2015 4
A
B
C
D
E F
1 km 4 km
2 km
4 km 1 km
2 km
1 km 2 km
A B C D E F
0 ∞ ∞ ∞ ∞ ∞
A B C D E F
- - - - - -
Nejkratší cesta do okolních měst Jak jsem se do města dostal
4 km
Jsme ve městě A, vzdálenost z A do A je 0, ostatní vzdálenosti jsou pro nás zatím
neznámé = nekonečno
Odkud jsme se do A dostali nevíme = -
Do bodu A lepší cesta nevede, označíme jako finální
vybereme nejkratší
5. http://lynt.cz
Hledáme nejlepší cestu
z města A do města F
23. 1. 2015 5
A
B
C
D
E F
1 km 4 km
2 km
4 km 1 km
2 km
1 km 2 km
A B C D E F
0 ∞ ∞ ∞ ∞ ∞
0 1 ∞ 4 4 ∞
0
0
0
0
A B C D E F
- - - - - -
- A - A A -
-
-
-
-
Nejkratší cesta do okolních měst Jak jsem se do města dostal
4 km
Pokračujeme od nejmenší vzdálenosti (A = 0), město A označíme jako navštívené.
Zjistíme do jakých měst s z A dostaneme (B,D,E) a jak je to daleko od A (1,4,4).
Pokud je vzdálenost menší než aktuální (∞), zapíšeme novou vzdálenost a místo odkud
jsme přišli. Pokud je vzdálenost větší, necháváme původní místo a vzdálenost.
Nejmenší vzdálenost (B=1) označíme jako finální a z tohoto města budeme pokračovat.
vybereme nejkratší
již nalezeno,
označeno jako finální
6. http://lynt.cz
Hledáme nejlepší cestu
z města A do města F
23. 1. 2015 6
A
B
C
D
E F
1 km 4 km
2 km
4 km 1 km
2 km
1 km 2 km
A B C D E F
0 ∞ ∞ ∞ ∞ ∞
0 1 ∞ 4 4 ∞
0 1 5 3 4 ∞
0 1
0 1
0 1
A B C D E F
- - - - - -
- A - A A -
- A B B A -
- A
- A
- A
Nejkratší cesta do okolních měst Jak jsem se do města dostal
4 km
Z města B se dostaneme do D a C, obě vzdálenosti od A jsou nyní menší než předtím,
napíšeme tedy, že jsme se do těchto bodů dostali z B a doplníme vzdálenosti od A.
Nejkratší vzdálenost je nyní do bodu D, nastavíme ho tedy jako finální a budeme do
něj pokračovat.
1+4
(1+2)<4 byla nalezena
výhodnější
cesta přes B
7. http://lynt.cz
Hledáme nejlepší cestu
z města A do města F
23. 1. 2015 7
A
B
C
D
E F
1 km 4 km
2 km
4 km 1 km
2 km
1 km 2 km
A B C D E F
0 ∞ ∞ ∞ ∞ ∞
0 1 ∞ 4 4 ∞
0 1 5 3 4 ∞
0 1 5 3 4 5
0 1 3
0 1 3
A B C D E F
- - - - - -
- A - A A -
- A B B A -
- A B B A D
- A B
- A B
Nejkratší cesta do okolních měst Jak jsem se do města dostal
4 km
Z města D se nyní dostaneme do měst E a F. Do města E je vzdálenost stejná jako byla z
A, necháváme tedy původní hodnoty. Do města F jsme našli novou nejkratší cestu.
Nejkratší cesta celkem je nyní do E – označíme jej jako finální a budeme pokračovat.
(3+2)<∞
8. http://lynt.cz
Hledáme nejlepší cestu
z města A do města F
23. 1. 2015 8
A
B
C
D
E F
1 km 4 km
2 km
4 km 1 km
2 km
1 km 2 km
A B C D E F
0 ∞ ∞ ∞ ∞ ∞
0 1 ∞ 4 4 ∞
0 1 5 3 4 ∞
0 1 5 3 4 5
0 1 5 3 4 5
0 1 3 4
A B C D E F
- - - - - -
- A - A A -
- A B B A -
- A B B A D
- A B B A D
- A B A
Nejkratší cesta do okolních měst Jak jsem se do města dostal
4 km
Z E se lze dostat pouze do F, ale vzdálenost není kratší než předešlá - necháváme původní.
Celkově jsou nyní nejkratší vzdálenosti do měst C a F (5km) vybereme si tedy jedno z nich
(např. C), doplníme jako finální a pokračujeme.
(4+2)>5
9. http://lynt.cz
Hledáme nejlepší cestu
z města A do města F
23. 1. 2015 9
A
B
C
D
E F
1 km 4 km
2 km
4 km 1 km
2 km
1 km 2 km
A B C D E F
0 ∞ ∞ ∞ ∞ ∞
0 1 ∞ 4 4 ∞
0 1 5 3 4 ∞
0 1 5 3 4 5
0 1 5 3 4 5
0 1 5 3 4 5
A B C D E F
- - - - - -
- A - A A -
- A B B A -
- A B B A D
- A B B A D
- A B B A D
Nejkratší cesta do okolních měst Jak jsem se do města dostal
4 km
Rozhodli jsme se, že budeme pokračovat z C, zde je cesta pouze do F a je delší než
cesta přes D, necháme tedy původní hodnoty.
Nejkratší cesta ze všech je nyní už pouze do cílového města F.
(5+1)>5
10. http://lynt.cz
Hledáme nejlepší cestu
z města A do města F
23. 1. 2015 10
A
B
C
D
E F
1 km 4 km
2 km
4 km 1 km
2 km
1 km 2 km
Nejkratší cesta do okolních měst Jak jsem se do města dostal
4 km
Prošli jsme celý graf a máme k dispozici seznam nejkratších cest do všech měst.
A B C D E F
0 ∞ ∞ ∞ ∞ ∞
0 1 ∞ 4 4 ∞
0 1 5 3 4 ∞
0 1 5 3 4 5
0 1 5 3 4 5
0 1 5 3 4 5
A B C D E F
- - - - - -
- A - A A -
- A B B A -
- A B B A D
- A B B A D
- A B B A D
11. http://lynt.cz
Hledáme nejlepší cestu
z města A do města F
23. 1. 2015 11
A
B
C
D
E F
1 km 4 km
2 km
4 km 1 km
2 km
1 km 2 km
A B C D E F
0 1 5 3 4 5
A B C D E F
- A B B A D
Nejkratší cesta do okolních měst Jak jsem se do města dostal
4 km
Z vytvořených tabulek jednoduše nalezneme
nejkratší cesty do všech měst.
• Vidíme, že vzdálenost do F je 5km.
• Do F jsme se dostali z D.
• Do D byla nejkratší vzdálenost z B.
• Do B jsme se dostali z A.
• Výsledná cesta je tedy A – B – D – F
Z tabulek vyčteme i všechny ostatní nejkratší cesty z bodu
A.
Například do C je to také 5km a dostali jsme se tam z B, do
kterého jsme šli z A.
12. http://lynt.cz
Kde se to používá
23. 1. 2015 12
A B C D E F
0 1 5 3 4 5
A B C D E F
- A B B A D
Nejkratší cesta do okolních měst Jak jsem se do města dostal
Dijskrův algoritmus používají například některé routovací protokoly jako
je OSPF.
Každý router má svou takto spočítanou tabulku, podle které okamžitě ví,
kam má posílat požadavky na konkrétního adresáta, aby došly
nejvýhodnější cestou.
Vzdálenost je v tomto případě rychlost jednotlivých linek (správce má
však stále možnost tyto hodnoty uměle ovlivňovat).