Gráfok szélességi bejárása Dijkstra algoritmus Készítette: Tácsik Zoltán TAZPAAI
Gráfok szélességi bejárása Dijkstra algoritmus Jelölések: d[1..n] : távolság a start csúcstól π[1..n] : a csúcsok szülő csúcsai KÉSZ halmaz : azon csúcsok melyek már megvizsgáltunk
Gráfok szélességi bejárása Dijkstra algoritmus Az algoritmus működése: s távolságát nullára állítjuk, minden más csúcsét ∞ -re minden lépésben a nem KÉSZ csúcsok közül kiválasztjuk a minimum távolságút (u): u-t beletesszük a KÉSZ halmazba u-t kiterjesszük, ha valamely szomszédos csúcsba kisebb útköltséggel jutunk, ekkor javítjuk a távolságot és a szülőt
Gráfok szélességi bejárása Dijkstra algoritmus SKIP
Gráfok szélességi bejárása Dijkstra algoritmus 8 Jelölések a prezentációban: 2 (2) d[C]=1 c(A,B)=2 A és B közötti él költsége B c(A,C)=8 C G(c)=8 1 Szülő kapcsolat 3 9 5 D távolsága a startcsúcstól (3) (4) d[D]=2 A startcsúcstól a D csúcsig a minimális útköltség 2 D E F G(c)=5 2 10 Él költség 5 (6) 3 G H Nem javít az él az útköltségen Feldolgozás sorrendje
Gráfok szélességi bejárása Dijkstra algoritmus 8 Példa gráf 2 B C 1 3 9 5 2 D E F 2 10 5 3 G H
Gráfok szélességi bejárása Dijkstra algoritmus 8 Első lépés s startcsúcs kiválasztása 2 B C 1 3 9 5 2 D E F 2 10 5 3 G H
Gráfok szélességi bejárása Dijkstra algoritmus (1) A = s 8 Első lépés s startcsúcs kiválasztása KÉSZ : A 2 B C 1 3 9 5 2 D E F 2 10 5 3 G H
Gráfok szélességi bejárása Dijkstra algoritmus (1) A = s 8 Második lépés Az A csúcsból vezető utak útköltségének vizsgálata. KÉSZ : A 2 d[B]=1 d[C]=1 c(A,B)=2 B c(A,C)=8 C G(c)=2 G(c)=8 1 3 9 5 2 D E F 2 10 5 3 G H
Gráfok szélességi bejárása Dijkstra algoritmus (1) A = s 8 Harmadik lépés Kiválasztjuk a legkisebb költségű élet, és a hozzá tartozó csúcsot. KÉSZ : A,B 2 d[B]=1 (2) d[C]=1 c(A,B)=2 B c(A,C)=8 C G(c)=2 G(c)=8 1 3 9 5 2 D E F 2 10 5 3 G H
Gráfok szélességi bejárása Dijkstra algoritmus (1) A = s 8 Negyedik lépés A B csúcsból vezető utak útköltségének vizsgálata. KÉSZ : A,B 2 d[B]=1 (2) d[C]=1 c(A,B)=2 B c(A,C)=8 C G(c)=2 G(c)=8 1 3 9 5 d[E]=2 d[D]=2 c(B,E)=2 c(B,D)=3 2 G(c)=3 D E F G(c)=5 2 10 5 3 G H
Gráfok szélességi bejárása Dijkstra algoritmus (1) A = s 8 Ötödik lépés Kiválasztjuk a legkisebb költségű élet, és a hozzá tartozó csúcsot. KÉSZ : A,B,E 2 d[B]=1 (2) d[C]=1 c(A,B)=2 B c(A,C)=8 C G(c)=2 G(c)=8 1 3 9 5 d[E]=2 (3) d[D]=2 c(B,E)=2 c(B,D)=3 2 G(c)=3 D E F G(c)=5 2 10 5 3 G H
Gráfok szélességi bejárása Dijkstra algoritmus (1) A = s 8 Hatodik lépés Mivel az E csúcsból nem lehet tovább menni, vissza lépünk a B csúcsra, és kiválasztjuk a legkisebb él költséget. KÉSZ : A,B,E,D 2 d[B]=1 (2) d[C]=1 c(A,B)=2 B c(A,C)=8 C G(c)=2 G(c)=8 1 3 9 5 d[E]=2 (3) (4) d[D]=2 c(B,E)=2 c(B,D)=3 2 G(c)=3 D E F G(c)=5 2 10 5 3 G H
Gráfok szélességi bejárása Dijkstra algoritmus (1) A = s 8 Hetedik lépés A D csúcsból vezető utak útköltségének vizsgálata. KÉSZ : A,B,E,D 2 d[B]=1 (2) d[C]=1 c(A,B)=2 B c(A,C)=8 C G(c)=2 G(c)=8 1 3 9 5 d[E]=2 (3) (4) d[D]=2 c(B,E)=2 c(B,D)=3 2 G(c)=3 D E F G(c)=5 2 10 5 d[H]=3 d[G]=3 3 G H c(D,G)=10 c(D,H)=2 G(c)=15 G(c)=7
Gráfok szélességi bejárása Dijkstra algoritmus (1) A = s 8 Nyolcadik lépés Kiválasztjuk a legkisebb költségű élet, és a hozzá tartozó csúcsot, a D csúcsból két élnek is 2 az él költsége, de a c(D,E) nem javítana az E út költségén. KÉSZ : A,B,E,D,H 2 d[B]=1 (2) d[C]=1 c(A,B)=2 B c(A,C)=8 C G(c)=2 G(c)=8 1 3 9 5 d[E]=2 (3) (4) d[D]=2 c(B,E)=2 c(B,D)=3 2 G(c)=3 D E F G(c)=5 2 10 (5) 5 d[H]=3 d[G]=3 3 G H c(D,G)=10 c(D,H)=2 G(c)=15 G(c)=7
Gráfok szélességi bejárása Dijkstra algoritmus (1) A = s 8 Kilencedik lépés Kiválasztjuk a legkisebb költségű élet, és a hozzá tartozó csúcsot, a H csúcsból találtunk egy jobb költségű utat G-be, így ezt javítjuk. KÉSZ : A,B,E,D,H 2 d[B]=1 (2) d[C]=1 c(A,B)=2 B c(A,C)=8 C G(c)=2 G(c)=8 1 3 9 5 d[E]=2 (3) (4) d[D]=2 c(B,E)=2 c(B,D)=3 2 G(c)=3 D E F G(c)=5 2 10 (5) 5 d[H]=3 d[G]=4 3 G H c(H,G)=3 c(D,H)=2 G(c)=10 G(c)=7
Gráfok szélességi bejárása Dijkstra algoritmus (1) A = s 8 Tízedik lépés Kiválasztjuk a legkisebb költségű élet, és a hozzá tartozó csúcsot. KÉSZ : A,B,E,D,H,G 2 d[B]=1 (2) d[C]=1 c(A,B)=2 B c(A,C)=8 C G(c)=2 G(c)=8 1 3 9 5 d[E]=2 (3) (4) d[D]=2 c(B,E)=2 c(B,D)=3 2 G(c)=3 D E F G(c)=5 2 10 (5) 5 (6) d[H]=3 d[G]=4 3 G H c(H,G)=3 c(D,H)=2 G(c)=10 G(c)=7
Gráfok szélességi bejárása Dijkstra algoritmus (1) A = s 8 Tizenegyedik lépés C is belekerül a KÉSZ halmazba KÉSZ : A,B,E,D,H,G,C 2 (8) d[B]=1 (2) d[C]=1 c(A,B)=2 B c(A,C)=8 C G(c)=2 G(c)=8 1 3 9 5 d[E]=2 (3) (4) d[D]=2 c(B,E)=2 c(B,D)=3 2 G(c)=3 D E F G(c)=5 2 10 (5) 5 (6) d[H]=3 d[G]=4 3 G H c(H,G)=3 c(D,H)=2 G(c)=10 G(c)=7
Gráfok szélességi bejárása Dijkstra algoritmus (1) A = s 8 Tizenkettedik lépés A C csúcsból vezető utak útköltségének vizsgálata. Mivel C csúcsból el lehet jutni 9 út költséggel E-be, ezt is megvizsgáljuk, de nem javít E elérési költségén. KÉSZ : A,B,E,D,H,G,C 2 (8) d[B]=1 (2) (2) d[C]=1 c(A,B)=2 B c(A,C)=8 C G(c)=2 G(c)=8 1 3 9 5 d[E]=2 (3) (3) (4) (4) d[D]=2 c(B,E)=2 c(B,D)=3 2 G(c)=3 D E F G(c)=5 2 10 d[F]=2 (5) (5) 5 (6) (6) d[H]=3 c(C,F)=5 d[G]=4 3 G H G(c)=13 c(H,G)=3 c(D,H)=2 G(c)=10 G(c)=7
Gráfok szélességi bejárása Dijkstra algoritmus (1) A = s 8 Tizenharmadik lépés Az F csúcsból vezető utak útköltségének vizsgálata. Mivel F csúcsból el lehet jutni 5 út költséggel H-be, ezt is megvizsgáljuk, de nem javít H elérési költségén. KÉSZ : A,B,E,D,H,G,C,F 2 (8) d[B]=1 (2) d[C]=1 c(A,B)=2 B c(A,C)=8 C G(c)=2 G(c)=8 1 3 9 5 d[E]=2 (3) (4) d[D]=2 c(B,E)=2 (9) c(B,D)=3 2 G(c)=3 D E F G(c)=5 2 10 d[F]=2 (5) 5 (6) d[H]=3 c(C,F)=5 d[G]=4 3 G H G(c)=13 c(D,G)=3 c(D,H)=2 G(c)=10 G(c)=7
Gráfok szélességi bejárása Dijkstra algoritmus 8 A feszítőfa (minimális útköltség) 2 B C 1 3 5 D E F 2 3 G H