Top Banner
Készítette: Lakos Péter Dijkstra algoritmus
20

Dijkstra algoritmus

Jan 15, 2016

Download

Documents

Cheri

Dijkstra algoritmus. Készítette: Lakos Péter. Adott egy élsúlyozott , véges gráf Negatív élsúlyokat nem tartalmaz Lehet irányított vagy irányítatlan Továbbá adott egy s kezdőcsúcs Határozzuk meg minden csúcsra az s-ből odavezető legrövidebb utat és annak hosszát!. Feladat:. - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Dijkstra  algoritmus

Készítette: Lakos PéterDijkstra algoritmus

Page 2: Dijkstra  algoritmus

Adott egy élsúlyozott, véges gráf

Negatív élsúlyokat nem tartalmaz

Lehet irányított vagy irányítatlan

Továbbá adott egy s kezdőcsúcs

Határozzuk meg minden csúcsra az s-ből odavezető legrövidebb utat és

annak hosszát!

Feladat:

Page 3: Dijkstra  algoritmus

Minden lépésben tartsuk nyilván az összes csúcsra a forrástól az illető

csúcsba vezető, eddig talált legrövidebb utat

a d[1..n] tömbben a távolságot

a P[1..n] tömbben a megelőző csúcsot

Az algoritmus elve:

Page 4: Dijkstra  algoritmus

1) Kezdetben a távolság legyen a kezdőcsúcsra 0, a többi csúcsra ∞

2) Minden lépésben a nem KÉSZ csúcsok közül tekintsük az egyik

legkisebb távolságú csúcsot

a) Azt mondhatjuk, hogy ez a v csúcs már KÉSZ, azaz ismert a hozzá vezető

legrövidebb út.

b) A v-t terjesszük ki, azaz a v csúcs szomszédaira számítsuk ki a (már ismert)

v-be vezető, és onnan egy kimenő éllel meghosszabbított út hosszát.

c) Amennyiben ez jobb (kisebb), mint az illető szomszédba eddig talált

legrövidebb út, akkor innentől kezdve ezt az utat tekintsük az adott

szomszédba vezető, eddig talált legrövidebb útnak.

Az algoritmus elve:

Page 5: Dijkstra  algoritmus

Az algoritmus:

A d[1..n] és P[1..n] tömböket a távolság és a megelőző csúcs nyilvántartására használjuk.

inicializálás

Page 6: Dijkstra  algoritmus

Az algoritmus:

A KÉSZ halmazba rakjuk azokat a csúcsokat, amelyekhez már ismerjük az egyik legrövidebb utat.

inicializálás

Page 7: Dijkstra  algoritmus

Az algoritmus:

Ezen kívül használunk egy minimum választó prioritásos sort (minQ)

inicializálás

Ebben a csúcsokat tároljuk a már felfedezett, legrövidebb d (s -> u) távolsággal, mint kulcs értékkel.

Page 8: Dijkstra  algoritmus

Az algoritmus működése:

minQ

Csúcs Kulcs

A (s)

B

C

D

E

F

G

H

KÉSZ:H

C

F

D

A

B

G

E

10

50

30 20

2090

20

80

40 1050

20

10Legyen A a kezdőcsúcs

(s:=A)

A (s) B C D E F G H

d:

P:

A (s) B C D E F G H

d: 0

P: NIL

A (s) B C D E F G H

d: 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞

P: NIL NIL NIL NIL NIL NIL NIL NIL

minQ

Csúcs Kulcs

A (s) 0B ∞

C ∞

D ∞

E ∞

F ∞

G ∞

H ∞

Page 9: Dijkstra  algoritmus

A (s) B C D E F G H

d: 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞

P: NIL NIL NIL NIL NIL NIL NIL NIL

minQ

Csúcs Kulcs

A (s) 0B ∞

C ∞

D ∞

E ∞

F ∞

G ∞

H ∞

Az algoritmus működése:

KÉSZ:H

C

F

D

A

B

G

E

10

50

30 20

2090

20

80

40 1050

20

10

u

minQ

Csúcs Kulcs

B ∞

C ∞

D ∞

E ∞

F ∞

G ∞

H ∞

A

v

A (s) B C D E F G H

d: 0 20 ∞ ∞ ∞ ∞ ∞ ∞

P: NIL NIL NIL NIL NIL NIL NIL NIL

minQ

Csúcs Kulcs

B 20

C ∞

D ∞

E ∞

F ∞

G ∞

H ∞

A (s) B C D E F G H

d: 0 20 ∞ ∞ ∞ ∞ ∞ ∞

P: NIL A NIL NIL NIL NIL NIL NIL

v

A (s) B C D E F G H

d: 0 20 ∞ 80 ∞ ∞ ∞ ∞

P: NIL A NIL NIL NIL NIL NIL NIL

minQ

Csúcs Kulcs

B 20

C ∞

D 80E ∞

F ∞

G ∞

H ∞

A (s) B C D E F G H

d: 0 20 ∞ 80 ∞ ∞ ∞ ∞

P: NIL A NIL A NIL NIL NIL NIL

v

A (s) B C D E F G H

d: 0 20 ∞ 80 ∞ ∞ 90 ∞

P: NIL A NIL A NIL NIL NIL NIL

minQ

Csúcs Kulcs

B 20

C ∞

D 80E ∞

F ∞

G 90H ∞

A (s) B C D E F G H

d: 0 20 ∞ 80 ∞ ∞ 90 ∞

P: NIL A NIL A NIL NIL A NIL

Nincs több ilyen csúcs,kilépünk a belső ciklusból.

Page 10: Dijkstra  algoritmus

A (s) B C D E F G H

d: 0 20 ∞ 80 ∞ ∞ 90 ∞

P: NIL A NIL A NIL NIL A NIL

minQ

Csúcs Kulcs

B 20

C ∞

D 80E ∞

F ∞

G 90H ∞

Az algoritmus működése:

KÉSZ:H

C

F

D

A

B

G

E

10

50

30 20

2090

20

80

40 1050

20

10

A

Az előző lépés mintájárafolytatjuk az algoritmust,amíg ki nem ürül a minQ.

minQ

Csúcs Kulcs

C ∞

D 80E ∞

F ∞

G 90H ∞

u

B

v

A (s) B C D E F G H

d: 0 20 ∞ 80 ∞ 30 90 ∞

P: NIL A NIL A NIL B A NIL

minQ

Csúcs Kulcs

C ∞

D 80E ∞

F 30

G 90H ∞

Page 11: Dijkstra  algoritmus

A (s) B C D E F G H

d: 0 20 ∞ 80 ∞ 30 90 ∞

P: NIL A NIL A NIL B A NIL

minQ

Csúcs Kulcs

C ∞

D 80E ∞

F 30

G 90H ∞

Az algoritmus működése:

KÉSZ:H

C

F

D

A

B

G

E

10

50

30 20

2090

20

80

40 1050

20

10

A

u

B

v

minQ

Csúcs Kulcs

C ∞

D 80E ∞

G 90H ∞

FA (s) B C D E F G H

d: 0 20 40 80 ∞ 30 90 ∞

P: NIL A F A NIL B A NIL

minQ

Csúcs Kulcs

C 40

D 80E ∞

G 90H ∞

v

A (s) B C D E F G H

d: 0 20 40 70 ∞ 30 90 ∞

P: NIL A F F NIL B A NIL

minQ

Csúcs Kulcs

C 40

D 70E ∞

G 90H ∞

Page 12: Dijkstra  algoritmus

A (s) B C D E F G H

d: 0 20 40 70 ∞ 30 90 ∞

P: NIL A F F NIL B A NIL

minQ

Csúcs Kulcs

C 40

D 70E ∞

G 90H ∞

Az algoritmus működése:

KÉSZ:H

C

F

D

A

B

G

E

10

50

30 20

2090

20

80

40 1050

20

10

A

u

Bv

F

v

minQ

Csúcs Kulcs

D 70E ∞

G 90H ∞

CA (s) B C D E F G H

d: 0 20 40 50 ∞ 30 90 ∞

P: NIL A F C NIL B A NIL

minQ

Csúcs Kulcs

D 50E ∞

G 90H ∞

A (s) B C D E F G H

d: 0 20 40 50 ∞ 30 90 60

P: NIL A F C NIL B A C

minQ

Csúcs Kulcs

D 50E ∞

G 90H 60

C-nek F is szomszédja, de azmár benne van a KÉSZ halmazban.

Page 13: Dijkstra  algoritmus

A (s) B C D E F G H

d: 0 20 40 50 ∞ 30 90 60P: NIL A F C NIL B A C

minQ

Csúcs Kulcs

D 50E ∞

G 90H 60

Az algoritmus működése:

KÉSZ:H

C

F

D

A

B

G

E

10

50

30 20

2090

20

80

40 1050

20

10

A

u

B

F

v

C

minQ

Csúcs Kulcs

E ∞

G 90H 60

D

A (s) B C D E F G H

d: 0 20 40 50 ∞ 30 70 60

P: NIL A F C NIL B D C

minQ

Csúcs Kulcs

E ∞

G 70H 60

Page 14: Dijkstra  algoritmus

A (s) B C D E F G H

d: 0 20 40 50 ∞ 30 70 60P: NIL A F C NIL B D C

minQ

Csúcs Kulcs

E ∞

G 70H 60

Az algoritmus működése:

KÉSZ:H

C

F

D

A

B

G

E

10

50

30 20

2090

20

80

40 1050

20

10

A

uB

F

C

D

minQ

Csúcs Kulcs

E ∞

G 70

H

A H csúcsnak nincs egy szomszédja sem,így be sem lépünk a belső ciklusba.

Page 15: Dijkstra  algoritmus

A (s) B C D E F G H

d: 0 20 40 50 ∞ 30 70 60P: NIL A F C NIL B D C

minQ

Csúcs Kulcs

E ∞

G 70

Az algoritmus működése:

KÉSZ:H

C

F

D

A

B

G

E

10

50

30 20

2090

20

80

40 1050

20

10

A

u

B

F

C

D

H

minQ

Csúcs Kulcs

E ∞

G

Page 16: Dijkstra  algoritmus

minQ

Csúcs Kulcs

E ∞

A (s) B C D E F G H

d: 0 20 40 50 ∞ 30 70 60P: NIL A F C NIL B D C

Az algoritmus működése:

KÉSZ:H

C

F

D

A

B

G

E

10

50

30 20

2090

20

80

40 1050

20

10

A

u

B

F

C

D

H

G

minQ

Csúcs Kulcs

E

Page 17: Dijkstra  algoritmus

A (s) B C D E F G H

d: 0 20 40 50 ∞ 30 70 60P: NIL A F C NIL B D C

Az eredmény:

H

C

F

D

A

B

G

E

10

50

30 20

2090

20

80

40 1050

20

10

Az elkészült d és P tömbök segítségével

minden csúcsról leolvasható az s-ből

odavezető legrövidebb út és annak

hossza

Pl.: a D csúcsba vezető leghatékonyabb

út 50 költségű

D-be C-n keresztül jutottunk

C-be F-ből jöttünk

F-be B-ből

B-be pedig A-ból (kezdőcsúcs)

Vegyük észre, hogy az E-be vezető út

költsége végtelen, vagyis ebbe a

csúcsba nem lehet eljutni

Page 18: Dijkstra  algoritmus

A (s) B C D E F G H

d: 0 20 40 50 ∞ 30 70 60P: NIL A F C NIL B D C

Az eredmény:

H

C

F

D

A

B

G

E

10

50

30 20

2090

20

80

40 1050

20

10

Ha berajzoljuk a kezdőcsúcsból az összes többi csúcsba vezető legjobb utat, megkapjuk a legrövidebb utak fáját.

Page 19: Dijkstra  algoritmus

A (s) B C D E F G H

d: 0 20 40 50 ∞ 30 70 60P: NIL A F C NIL B D C

Az eredmény: Ha berajzoljuk a kezdőcsúcsból

az összes többi csúcsba vezető legjobb utat, megkapjuk a legrövidebb utak fáját.

H

C

F

D

A

B

G

E

10

50

30 20

2090

20

80

40 1050

20

10

H

C

F

D

A

B

G

10

20

20

10

20

10

Page 20: Dijkstra  algoritmus

Megjegyzés:

További információk, példa: http://people.inf.elte.hu/fekete/docs_2/grafalg/grafalg.pdf25 - 30. oldal