• Nem Talált Eredményt

Legrövidebb utat keres ˝o algoritmusok

N/A
N/A
Protected

Academic year: 2022

Ossza meg "Legrövidebb utat keres ˝o algoritmusok"

Copied!
44
0
0

Teljes szövegt

(1)

Legrövidebb utat keres ˝ o algoritmusok

László Papp

BME

2021. október 1.

(2)

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.)

(3)

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.)

(4)

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.)

(5)

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.)

(6)

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.)

(7)

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.)

(8)

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.)

(9)

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.)

(10)

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.)

(11)

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.)

(12)

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.

(13)

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.

(14)

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.

(15)

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

, , , , , ,

Befejezési sorrend:

A, B, C, E, F, D, G

(16)

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

, , , , ,

Befejezési sorrend:

A, B, C, E, F, D, G

(17)

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

, , , ,

Befejezési sorrend:

A

, B, C, E, F, D, G

(18)

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

, , ,

Befejezési sorrend:

A, B

, C, E, F, D, G

(19)

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

, ,

Befejezési sorrend:

A, B

, C, E, F, D, G

(20)

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

,

Befejezési sorrend:

A, B, C

, E, F, D, G

(21)

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

,

Befejezési sorrend:

A, B, C, E

, F, D, G

(22)

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

,

Befejezési sorrend:

A, B, C, E, F

, D, G

(23)

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

(24)

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

(25)

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

(26)

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.

(27)

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.

(28)

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.

(29)

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.

(30)

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

(31)

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.

(32)

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.

(33)

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!

(34)

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

(35)

É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.

(36)

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.

(37)

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.

(38)

Dijkstra algoritmus példa

20

3

9 B

D

A 5

C 20

S

E 3 2

2 8

9

3 KÉSZ={S}

dist(S,B)=14 és a 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

(39)

Dijkstra algoritmus példa

20

3

9 B

D

A 5

C 20

S

E 3 2

2 8

9

3 KÉSZ={S,E}

dist(S,B)=14 és a 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

(40)

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}

dist(S,B)=14 és a 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

(41)

Dijkstra algoritmus példa

20

3

9 B

D

A 5

C 20

S

E 3 2

2 8

9

3 KÉSZ={S,E,C,D}

dist(S,B)=14 és a 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

(42)

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}

dist(S,B)=14 és a 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

(43)

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 a 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

(44)

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

Hivatkozások

KAPCSOLÓDÓ DOKUMENTUMOK

(2) Elkészítjük a G ford gráfot, melyet úgy kapunk G-b ˝ol, hogy minden él irányítását megfordítjuk. (4) Ha mindkét bejárás során minden pontot bejártunk, akkor

Bizonyítás: ⇒ : Ha G nem DAG, akkor nem lehet topologikus rendezése, mert egy irányított kör csúcsainak nyilván nincs megfelel ˝o sorrendje.... Egy irányított gráfnak akkor

The problem is solved by mathematical programming in the function space ℓ 2 and in spite of direct solution technique of the mathematical programming, the time-dependent

[r]

A faji sajátosságot azzal adjuk meg, hogy rámutatunk arra, hogy itt három egyenes oldal által határolt síkidomról van szó.. Ezzel elhatároljuk a háromszöget a nemfogalom

[r]

26 A csallóközi foglyok munkába állításának pontos dátuma ismeretlen, de az a tény, hogy a „dunaszerdahelyi iparosok és kereskedõknél alkalmazott hadifoglyokat a kato-

Az is természetes, hogy az győz, aki a legrövidebb idő alatt teszi meg az előre kimért utat. Célunk elérése érdekében ezeket a versenyszámokat módosítjuk