15
Dijkstra algoritmusa Gubicza József (GUJQAAI.ELTE)

Dijkstra algoritmusa

  • Upload
    keene

  • View
    17

  • Download
    0

Embed Size (px)

DESCRIPTION

Dijkstra algoritmusa. Gubicza József (GUJQAAI.ELTE). Jellemzők. Cél: Adott egyszerű gráfban a legrövidebb (vagy min. költségű) út meghatározása. Algoritmikus szinten: 3 tömb feltöltése; - d [1..n] a csúcsokhoz tartozó min. költségek ill. - π ( parent ) a csúcsokhoz tartozó szülők meghat. - PowerPoint PPT Presentation

Citation preview

Page 1: Dijkstra  algoritmusa

Dijkstra algoritmusa

Gubicza József (GUJQAAI.ELTE)

Page 2: Dijkstra  algoritmusa

Jellemzők

• Cél: Adott egyszerű gráfban a legrövidebb (vagy min. költségű) út meghatározása.

• Algoritmikus szinten: 3 tömb feltöltése;- d[1..n] a csúcsokhoz tartozó min. költségek ill.- π (parent) a csúcsokhoz tartozó szülők meghat.- a kész[1..n] segédtömb segítségével, amely aztmutatja, vizsgáltuk-e már az adott csúcsot.

• A gráf élcímkéi pozitív értékeket vehetnek fel, a csúcscímkék pozitív, ill. végtelent.

Page 3: Dijkstra  algoritmusa

Az algoritmus

A minimum keresés a d tömbbeli min. értékre vonatkozik a legkisebb költségű csúcs, ami még nincs kész.

Page 4: Dijkstra  algoritmusa

1 4

5

6

3

2

77

5

8

8

4

3

4

2

5

8

7

9

1 2 3 4 5 6 7

d ∞ ∞ ∞ ∞ ∞ ∞ ∞

π ∕ ∕ ∕ ∕ ∕ ∕ ∕

Kész 0 0 0 0 0 0 0

∞ ∞

∞∞

Kezdőállapot: minden csúcsot ∞-el címkézünk, szüleiket NIL-re állítjuk, valamint a Kész értékeket 0-kra,és kijelöljük a kezdőcsúcsot.

s =

Page 5: Dijkstra  algoritmusa

1 4

5

6

3

2

77

5

8

8

4

3

4

2

5

8

7

9

1 2 3 4 5 6 7

d 0 ∞ ∞ ∞ ∞ ∞ ∞

π ∕ ∕ ∕ ∕ ∕ ∕ ∕

Kész 1 0 0 0 0 0 0

0 ∞

∞∞

A kezdőcsúcs értékét 0-ra állítjuk,így a FeltMinker(d[1..n], u, Kész[j] = 0) őt fogja megtalálni először. Ezt a csúcsot készre állítjuk.

s =

Page 6: Dijkstra  algoritmusa

1 4

5

6

3

2

77

5

8

8

4

3

4

2

5

8

7

9

1 2 3 4 5 6 7

d 0 5 ∞ ∞ ∞ ∞ ∞

π ∕ 1 ∕ ∕ ∕ ∕ ∕

Kész 1 0 0 0 0 0 0

5

0 ∞

∞∞

A csúcs minden szomszédjára megnézzük (amelyek még nincsenek Kész, 5 és 3), hogy:d[u] + c(u,v) < d[v]Tehát az él, javít e a költségen?Ha igen, d[v] = d[u] + c(u,v), ill.π[v] := u

szülő jelölése

s =

Page 7: Dijkstra  algoritmusa

1 4

5

6

3

2

77

5

8

8

4

3

4

2

5

8

7

9

1 2 3 4 5 6 7

d 0 5 8 ∞ ∞ ∞ ∞

π ∕ 1 1 ∕ ∕ ∕ ∕

Kész 1 0 0 0 0 0 0

5

0 ∞

∞8

Ha végeztünk az összes szomszéd vizsgálatával….

s =

Page 8: Dijkstra  algoritmusa

1 4

5

6

3

2

77

5

8

8

4

3

4

2

5

8

7

9

1 2 3 4 5 6 7

d 0 5 8 ∞ ∞ 13 ∞

π ∕ 1 1 ∕ ∕ 2 ∕

Kész 1 1 0 0 0 0 0

5

0 ∞

13

∞8

Iterálunk még egyet, alegkisebb költségű még nem kész elem a 2-es csúcs (d. 5), még nem kész szomszédai: 6, 4, 3

s =

Page 9: Dijkstra  algoritmusa

1 4

5

6

3

2

77

5

8

8

4

3

4

2

5

8

7

9

1 2 3 4 5 6 7

d 0 5 8 9 ∞ 13 ∞

π ∕ 1 1 2 ∕ 2 ∕

Kész 1 1 0 0 0 0 0

5

0 9

13

∞8

Mivel a 3-as csúcsba érés nem javítana a költségen 5+7 < 8 => HAMIS, ígytovább iterálunk.

s =

Page 10: Dijkstra  algoritmusa

1 4

5

6

3

2

77

5

8

8

4

3

4

2

5

8

7

9

1 2 3 4 5 6 7

d 0 5 8 9 12 13 ∞

π ∕ 1 1 2 3 2 ∕

Kész 1 1 1 0 0 0 0

5

0 9

13

128

A 3-as csúcs még nem kész szomszédai: 4, 5..ezek közül csak az 5-össel érünk el javulást

s =

Page 11: Dijkstra  algoritmusa

1 4

5

6

3

2

77

5

8

8

4

3

4

2

5

8

7

9

1 2 3 4 5 6 7

d 0 5 8 9 12 11 ∞

π ∕ 1 1 2 3 4 ∕

Kész 1 1 1 1 0 0 0

5

0 9

11

128

A 4-es csúcs javít a 6-os-ba érés költségén, és figyeljünk rá, hogy a 6-os szülője ígyfelülíródik!

s =

Page 12: Dijkstra  algoritmusa

1 4

5

6

3

2

77

5

8

8

4

3

4

2

5

8

7

9

1 2 3 4 5 6 7

d 0 5 8 9 12 11 18

π ∕ 1 1 2 3 4 6

Kész 1 1 1 1 0 1 0

5

0 9

11

18

128

Figyelem: A 6-os csúccsal folytatjuk! Neki kisebb a költsége a még nem kész csúcsok közül

s =

Page 13: Dijkstra  algoritmusa

1 4

5

6

3

2

77

5

8

8

4

3

4

2

5

8

7

9

1 2 3 4 5 6 7

d 0 5 8 9 12 11 18

π ∕ 1 1 2 3 4 6

Kész 1 1 1 1 1 1 0

5

0 9

11

18

128

Most pedig az 5-ös csúcsot vesszük először, és látjuk, hogy a 7-es költségén ő nem javít…

s =

Page 14: Dijkstra  algoritmusa

1 4

5

6

3

2

77

5

8

8

4

3

4

2

5

8

7

9

1 2 3 4 5 6 7

d 0 5 8 9 12 11 18

π ∕ 1 1 2 3 4 6

Kész 1 1 1 1 1 1 1

5

0 9

11

18

128

Így, az iteráció ráugrik az utolsó csúcsra, késznek jelöli.Mivel az összes csúcs kész van, az algoritmus leáll.

s =

Page 15: Dijkstra  algoritmusa

1 4

5

6

3

2

77

5

8

8

4

3

4

2

5

8

7

9

1 2 3 4 5 6 7

d 0 5 8 9 12 11 18

π ∕ 1 1 2 3 4 6

Kész 1 1 1 1 1 1 1

5

0 9

11

18

128

Végül minden csúcsra megkapjuk, hogy mennyi a hozzá vezető minimális költségű út. (7-es 18, 5-ös 12)

Megj.: a gráf irányításától eltekinthetünk ezen a szinten.

s =