Legrövidebb utat keres ˝ o algoritmusok
László Papp
BME
2021. október 1.
Gráfbejárások
EgyGgráf egybejárásánaG csúcsainak valamilyen sorrendben történ ˝o végiglátogatását értjük. A cél az, hogy egyv csúcsot lehet ˝oleg úgy látogassunk meg, hogy egy már bejártu csúcsból lépünk át azuv élen keresztül.
A cél a gráf összes csúcsának a bejárása.
B
A C
D
Minden bejáráshoz tartozik egyelérési sorrend, ami nem más mintGcsúcsainak egy sorrendje, hogy mikor láttuk ˝oket
el ˝oször a bejárás során.Befejezési sorrendenpedigG csúcsainak azon sorrendjét tekintjük amely megmondja, hogy milyen sorrendben foglalkoztunk velük utoljára.
A példa bejárás elérési sorrendje B, D, C, A, a befejezési sorrendje pedig B, C, D, A. (Ez a bejárás se nem BFS se nem DFS, BFS és DFS def kés ˝obb.)
Bejárási fa
A csúcsok nagy részébe egy korábbi csúcsból kiinduló él mentén érkeztünk meg el ˝oször. Bejárási fánaknevezzük azt az irányított gráfot, mely pontosan ezen éleket az újonnan elért csúcsok fele irányítva tartalmazza. Ez a gráf körmentes, viszont nem feltétlen fa! Lehet erd ˝o is.
B
A C
D
Definíció:Azuv él/irányított élfaéla bejárásra nézve, ha a bejárási fának az éle. Amenyibenuv nem faél, akkor:
▶ uvel ˝oreélha a bejárási fábanu-ból vezet irányított út v-be,
▶ uvvisszaélha a bejárási fábanv-b ˝ol vezet irányított út u-be,
▶ uvkeresztélha az el ˝obbiek közül egyik sem.
Megjegyzés:Irányítatlan esetben az el ˝oreélek és a visszaélek ugyanazok.
Néhány definíció:
Definíció:HaGegy irányított gráf és(u,⃗v)egy irányított él, akkorv-t azukiszomszédjának,u-t pedig av
beszomszédjánaknevezzük.
1 2 3
4 5 6 7
(6,3) (3,7)
(1,4) (2,5)
(1,2) (3,2)
(5,4) (5,6) (6,7)
Példa:Az 2-es csúcsnak az 1-es és 3-as csúcsok beszomszédjai, az 5-ös csúcs a kiszomszédja.
Jelölés:HaE egy lista, akkor az E lista i. elemétE(i)-vel jelöljük.
Szélességi bejárás, BFS(Breadth-first search) Input:G(esetleg irányított) gráf,v1gyökérpont.
0. Létrehozunk egy kezdetben üres E listát.
1. Bejárjuk av1csúcsot,v1-et betesszük azE-be. i:=1.
2. AzE(i)csúcs összes még be nem járt (ki-)szomszédját bejárjuk valamint ezen csúcsokat azE végére f ˝uzzük. Az E(i)csúcs és a most bejárt szomszédai között futó élekek bevesszük a bejárási fába, irányítatlan esetben úgy, hogy azE(i)csúcs legyen a kezd ˝opontjuk.
3. Ha azE listában szerepeli+1. csúcs, akkor azi-t növeljük 1-gyel és a 2-es lépésre ugrunk.
4. Output: E ami az elérési sorrend + bejárási fa
B A
D C
E F G
Elérési sorrend:
A, B, C, E, F, D, G Befejezési sorrend:
A, B, C, E, F, D, G
A BFS nem feltétlen jár be minden csúcsot
Az itt megadott BFS algoritmus nem felétlenül járja be az egész gráfot ha a gráf irányított, illetve biztosan nem járja be ha nem összefügg ˝o.
Példa:LegyenC a kezd ˝o csúcs. Ekkor az algoritmus végén E = (C,D)és azAésBcsúcsok nem lettek bejárva.
D
A B C
Ha a BFS algoritmust egyv csúcsból indítom egy irányítatlan gráf esetén, akkor pont av csúcsot tartalmazó összefügg ˝o komponensben lév ˝o csúcsokat fogja bejárni. Emiatt a BFS segítségével meg lehet találni az összefügg ˝o komponenseket.
Legrövidebb utak fája
Definíció:Egy (irányított) úthosszaaz ˝ot alkotó élek száma. A G(irányított) gráfban találhatóu ésv csúcsoktávolságána legrövidebbu ésv közötti (irányított) út hosszát értjük. Ezt a mennyiséget általáband(u,v)-vel jelöljük.
Megjegyzés: Irányított gráf esetén d(u,v)ésd(v,u)tipikusan nem egyenl ˝o!
d(A,B) =1̸=3=d(B,A)
A
B
Állítás
Ha aGgráf egy BFS fájában irányított út vezetu-bólv-be akkor ez az irányított út egyben egy legrövidebb útuésv között.
Következmény:Egy szélességi kereséssel meghatározhatóak a gyökérpont és bármely másik csúcs közötti távolságok.
Például azAésF távolsága 2.
B A
D C
E F G
A BFS néhány tulajdonsága
Állítás
A BFS algoritmus lépésszáman+e-vel arányos, aholna gráf csúcsszámaepedig az élszáma.
Bizonyítás:Minden csúcsot legfeljebb egyszer írunk fel a listába, ezért a lista karbantartása a csúcsszámmal arányos lépést kíván. Minden bejárt csúcsnak megvizsgáljuk a szomszédait, hogy bejártak-e, de ezekb ˝ol a vizsgálatokból legfeljebb kétszer annyi van mint él.
Állítás:
A BFS bejárásra nézve nincsenek el ˝ore élek.
Feladat
Adott egyGirányított vagy irányítatlan gráf, illetve aG élhalmazán értelmezettlhosszfüggvény mely megmondja, hogy egy él milyen hosszú.
Definíció:Egyút hosszaaz utat alkotó élek hosszainak az összege. Azuésv csúcsoktávolságánazu ésv között található legrövidebb (irányított gráf esetén irányított) út hosszát értjük és ezt a mennyiségetdist(u,v)-vel jelöljük.
Példa:
dist(S,D) =6 dist(D,S) =∞ dist(S,A) =11
20
3
9 20
B
D
A 5
5
3 C S
20
Adjunk eljárást amely tetsz ˝oleges két csúcs távolságát meghatározza és meg is ad egy legrövidebb utat közöttük!
Legrövidebb utakat keres ˝o algoritmusok ötlete
Definíció:AGirányított vagy irányítatlan gráfban lév ˝o
dist(u,v)távolságfüggvényre nézve egy fels ˝o becslés ab(u,v) ha mindenu,v csúcspárradist(u,v)≤b(u,v).
Él menti javítás
Hab(u,v)>b(u,w) +l(w,v)akkor cseréljük leb(u,v)értékét b(u,w) +l(w,v)-re! Ebben az esetben azt mondjuk, hogy awv él mentén javítottuk a fels ˝o becslésünket!
u
b(u,w)=8 w
b(u,v)=10 v
u
b(u,v)=12
b(u,w)=8 w
v
l(w,v)=2 l(w,v)=2
Él menti javítás haszna
u
b(u,w)=8 w
b(u,v)=10 v
u
b(u,v)=12
b(u,w)=8 w
v
l(w,v)=2 l(w,v)=2
Állítások:
1. Ha egy fels ˝o becslésre alkalmazzuk az él menti javítást akkor fels ˝o becslést kapunk.
2. Ha semelyik él mentén sem tudunk egy fels ˝o becslést javítani, akkor az a fels ˝o becslés megegyezik a távolságfüggvénnyel.
Állítások haszna:Az él menti javítást megfelel ˝oen sokszor ismételve fogjuk kiszámolni a távolságokat.
Dijkstra algoritmusa
Input: G= (V,E)(irányított/irányítatlan) gráf, egy l:E →R+∪0 hosszfüggvény és egys∈V csúcs.
0. KÉSZ:={s},d(s) :=0,d(v) :=∞mindens-t ˝ol különböz ˝o v csúcsra, és legyenu :=s.
1. Azucsúcsból a KÉSZ halmazon kívüli csúcsokba futó élek mentén próbáljuk javítani ad()fels ˝o becslést, azaz ha v ∈KÉSZ,/ uv ∈E ésd(v)>d(u) +l(u,v), akkor d(v) :=d(u) +l(u,v)valamintT(v) :=u.
2. Legyenu a KÉSZ halmazon kívüli csúcsok közül az amelyikre ad(u)érték a legkisebb. Tegyük be azu-t a KÉSZ halmazba.
3. Ha minden csúcs a KÉSZ halmazban van akkor STOP, különben folytassuk az 1-es lépéssel.
Output:d(v) =dist(s,v)értékek ésT tömb melyb ˝ol a legröbidebb utak kiolvashatóak.
A dijkstra algoritmus magyarázata (nem bizonyítás)
Az algoritmus mindenv csúcsra meghatározza adist(s,v) távolságot, ezt ad(v)számolásával éri el, ami sohasem n ˝o, és minden egyes lépésben fels ˝o becslése adist(s,v)-nek.
Egy KÉSZ nevezet ˝u halmazba helyezi egyesével a csúcsokat.
A KÉSZ halmazban lév ˝o csúcsokra a fels ˝o becslés már pontos lesz, azaz hav ∈KÉSZ akkord(v) =dist(s,v). Kezdésnek csak azsvan a kész halmazban.
Az algoritmus futása soránT(v)azt mondja meg, hogy egys ésv közöttid(v)hosszú út esetén melyik csúcs el ˝ozi megv-t.
Emiatt a végs ˝oT(v)megmondja, hogy egysésv közötti legrövidebb úton melyik csúcs el ˝ozi megv-t.
Ezért ha egysésv közötti legrövidebb utat szeretnénk megkapni, akkor ennek a fordítottját adja a
v,T(v),T(T(v)), . . . ,T(T(. . .T(v). . .)) =s sorozat, amit csak meg kell fordítani.
Dijkstra algoritmus példa
20
3
B
D
A 5
C 20
S
E 3 2
2 8
9 3
9
KÉSZ={S,E,C,D,A,B}
dist(S,B)=14 és egy legrövidebb útSésB között SCDAB.
d()
S 0 0 0 0 0 0
A ∞ 20 10 10 9 9
B ∞ ∞ ∞ 23 15 14
C ∞ 3 3 3 3 3
D ∞ ∞ ∞ 6 6 6
E ∞ 2 2 2 2 2
T() S
A S E E D D
B C D A
C S S S S S
D C C C
E S S S S S
Legrövidebb utak fája Dijkstra esetén
Minden egyesv csúcs esetén jelöljük meg azt az élet, amely menti javítás utoljára csökkentette av s-t ˝ol vett távolságát. Ez av csúcs esetén pontosan a(T(v),v)élet jelenti. Így haG összefügg ˝o, akkorG-nek egy olyan feszít ˝ofáját kapjuk, amely tartalmazs-b ˝ol minden más csúcsba egy legrövidebb utat.
20
3
B
D
A 5
C S 20
E 3 2
2 8
9 3
9