Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Dijskrův algoritmus

2,338 views

Published on

Názorná ukázka Dijskrova algoritmu pro hledání nejkratších cest.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Dijskrův algoritmus

  1. 1. http://lynt.cz Dijskrův algoritmus názorná ukázka Vláďa Smitka vladimir.smitka@lynt.cz @smitka (ale skoro nic nepíšu) Lynt services s.r.o.
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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).
  13. 13. http://lynt.cz Děkuji za pozornost! • Článek s využitím Dijskrova algoritmu při analýze struktury webu 23. 1. 2015 13

×