• Keine Ergebnisse gefunden

Flussüberquerung (Missionare und Kannibalen)

N/A
N/A
Protected

Academic year: 2022

Aktie "Flussüberquerung (Missionare und Kannibalen)"

Copied!
110
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

11. Kürzeste Wege

Motivation, Universeller Algorithmus, Dijkstras Algorithmus auf Distanzgraphen,

[Ottman/Widmayer, Kap. 9.5.1-9.5.2 Cormen et al, Kap. 24.1-24.3]

(2)

Flusses. Ein dort bereitstehendes Boot fasst maximal zwei Personen. Zu keiner Zeit dürfen an einem Ort (Ufer oder Boot) mehr Kannibalen als Missionare sein. Wie kommen die Missionare und Kannibalen möglichst schnell über den Fluss?16

K K K

M M M

B

(3)

Formulierung als Graph

Zähle alle erlaubten Konfigurationen als Knoten auf und verbinde diese mit einer Kante, wenn Überfahrt möglich ist. Das Problem ist dann ein Problem des kürzesten Pfades

Beispiel

links rechts

Missionare 3 0

Kannibalen 3 0

Boot x

links rechts

Missionare 2 1

Kannibalen 2 1

Boot x

Überfahrt möglich

6Personen am linken Ufer 4Personen am linken Ufer

(4)

3 0 3 0 x

3 0 2 1 x

3 0 1 2 x

3 0 0 3 x

2 1 2 1 x

1 2 1 2 x

0 3 1 2 x

0 3 2 1 x

0 3 3 0 x

6 5 4 3 4 2 1 2 3

3 0 2 1 x

3 0 1 2 x

3 0 0 3 x

2 1 2 1 x

1 2 1 2 x

0 3 1 2 x

0 3 2 1 x

0 3 3 0 x

0 3 0 3 x

5 4 3 4 2 1 2 3 0

(5)

Anderes Beispiel: Schiebepuzzle

Wollen die schnelleste Lösung finden für 2 4 6

7 5 3 1 8

1 2 3 4 5 6 7 8

(6)

4 5 6 7 8

4 5 6

7 8

4 5 6 7 8

1 2 3 4 5 7 8 6

1 2 3

4 5

7 8 6

1 2 3 4 8 5

7 6

1 2 3 4 5 7 8 6

2 4 6 7 5 3 1 8

(7)

Routenfinder

Gegeben Städte A - Z und Distanzen zwischen den Städten.

A B

C D

E

F G

H

I Z

3

1 6

4 1 3

5

7 1

4 5

1

4 1

7 4

3 8

5

10 5

Was ist der kürzeste Weg von A nach Z?

(8)

Lösung: Breitensuche

S

t

(9)

Gewichtete Graphen

Gegeben:G= (V, E, c),c:E →R,s, tV.

Gesucht: Länge (Gewicht) eines kürzesten Weges vonsnacht.

Weg:p=hs=v0, v1, . . . , vk =ti,(vi, vi+1)∈E (0≤i < k) Gewicht:c(p) := Pk−1i=0 c((vi, vi+1)).

S

2 1 t

3

2

1

Weg mit Gewicht9

(10)

Notation: Wir schreiben

u p v oder p:u v und meinen einen Wegpvonunachv

Notation: δ(u, v)= Gewicht eines kürzesten Weges vonunachv:

δ(u, v) =

∞ kein Weg vonunachv

min{c(p) :u p v} sonst

(11)

Beobachtungen (1)

Es gibt Situationen, in denen kein kürzester Weg existiert: negative Zyklen könnten auftreten.

s u

v

w 1 t

1

−1

−1 1

1

(12)

Es kann exponentiell viele Wege geben.

s

t (mindestens2|V|/2 Wege von snacht)

⇒Alle Wege probieren ist zu ineffizient.

(13)

Beobachtungen (3)

Dreiecksungleichung Für alle s, u, vV:

δ(s, v)δ(s, u) +δ(u, v)

s

u

v

Ein kürzester Weg vonsnachv(ohne weitere Einschränkungen) kann nicht länger sein als ein kürzester Weg vonsnachv, deruenthalten muss.

(14)

Optimale Substruktur

Teilpfade von kürzesten Pfaden sind kürzeste Pfade: Seip=hv0, . . . , vkiein kürzester Pfad vonv0 nachvk. Dann ist jeder der Teilpfadepij =hvi, . . . , vji (0≤i < jk) ein kürzester Pfad vonvi nachvj.

u p x p y v

q

p

Wäre das nicht so, könnte man einen der Teilpfade kürzen, Widerspruch zur Voraussetzung.

(15)

Beobachtungen (5)

Kürzeste Wege enthalten keine Zyklen

1. Kürzester Weg enthält negativen Zyklus: es existiert kein kürzester Weg.

Widerspruch.

2. Weg enthält positiven Zyklus: Weglassen des positiven Zyklus kann den Weg verkürzen: Widerspruch

3. Weg enthält Zyklus vom Gewicht0: Weglassen des Zyklus verändert das Pfadgewicht nicht. Weglassen (Konvention).

(16)

Gesucht: Kürzeste Wege von einem Startknotensaus.

Gewicht des kürzesten bisher gefundenen Pfades ds:V →R

Zu Beginn:ds[v] =∞für alle KnotenvV. Ziel: ds[v] =δ(s, v)für allevV.

Vorgänger eines Knotens

πs :VV

Zu Beginnπs[v]undefiniert für jeden KnotenvV

(17)

Allgemeiner Algorithmus

1. Initialisiereds undπs:ds[v] =∞,πs[v] =null für allevV 2. Setzeds[s]←0

3. Wähle eine Kante(u, v)∈E Relaxiere(u, v):

ifds[v]> ds[u] +c(u, v)then ds[v]←ds[u] +c(u, v) πs[v]←u

4. Wiederhole 3 bis nichts mehr relaxiert werden kann.

(bisds[v]≤ds[u] +c(u, v) ∀(u, v)∈E)

(18)

Relaxieren ist sicher

Zu jeder Zeit gilt in obigem Algorithmus

ds[v]≥δ(s, v) ∀v ∈V

δ(s, u)ds[u] [Induktionsvorraussetzung].

δ(u, v)c(u, v) [Minimalität vonδ]

ds[u] +c(u, v)δ(s, v)

⇒min{ds[v], ds[u] +c(u, v)} ≥δ(s, v)

(19)

Relaxieren ist sicher

Zu jeder Zeit gilt in obigem Algorithmus

ds[v]≥δ(s, v) ∀v ∈V Im Relaxierschritt:

δ(s, v)δ(s, u) +δ(u, v) [Dreiecksungleichung].

δ(s, u)ds[u] [Induktionsvorraussetzung].

δ(u, v)c(u, v) [Minimalität vonδ]

ds[u] +c(u, v)δ(s, v)

⇒min{ds[v], ds[u] +c(u, v)} ≥δ(s, v)

(20)

Wie / in welcher Reihenfolge wählt man die Kanten in obigem Algorithmus?

(21)

Spezialfalfall: Gerichteter Azyklischer Graph (DAG)

DAG⇒Topologische Sortierung liefert optimale Besuchsreihenfolge

s

v1

v2

v3

v4

v5

v6

v7 v8 2

4

−3

1

−1

2

−2

2

−2 2

3

−1

0

2

4

−1

−2

0

−4

3

−6

Top. Sortieren:⇒Reihenfolges, v1, v2, v3, v4, v6, v5, v8, v7.

(22)

s

v1

v2

v3

v4

v5

v6

v7 v8 2

4

−3

1

−1

2

−2

2

−2 2

3

−1 0

2

4

−1

−2

0

−4

3

−6

(23)

Annahme (vorübergehend)

s

a

b

c

d

e 2

3 2

6

1

3

1

1

Alle Gewichte von Gsindpositiv.

(24)

s

u

v

w 4

7

2

t 0

4

7

2

obere Schranken

kleinste obere Schranke globales Minimum!

Kann nicht weiter relaxiert werden

(25)

Grundidee

MengeV aller Knoten wird unterteilt in die MengeM von Knoten, für die schon ein kürzester Weg vonsbekannt ist die MengeR=Sv∈MN+(v)\M von Knoten, für die kein kürzester Weg bekannt ist, die jedoch vonM direkt erreichbar sind.

die MengeU =V \(M ∪R)von Knoten, die noch nicht berücksichtigt wurden.

s 2 2 5

3

5

2 1

2

(26)

Induktion über|M|: Wähle Knoten ausRmit kleinster oberer Schranke. Nimm r zu M hinzu, und updateRundU.

Korrektheit: Ist innerhalb einer “Wellen- front” einmal ein Knoten mit minimalem Pfadgewichtwgefunden, kann kein Pfad über später gefundene Knoten (mit Gewicht ≥ w) zu einer Verbesserung führen.

s 2 2 5

3

5

2 1

2

(27)

Algorithmus Dijkstra(G, s)

Input: Positiv gewichteter Graph G= (V, E, c), Startpunkt sV

Output: Minimale Gewichtedder k¨urzesten Pfade und Vorg¨angerknoten f¨ur jeden Knoten.

foreachuV do

ds[u]← ∞;πs[u]←null ds[s]←0;R← {s}

whileR 6=∅do

u← ExtractMin(R) foreach vN+(u) do

if ds[u] +c(u, v)< ds[v]then ds[v]←ds[u] +c(u, v) πs[v]←u

RR∪ {v}

(28)

s

a

b

c

d

e 2

3 2

6

1

3

1

1

(29)

Beispiel

s

a

b

c

d

e 2

3 2

6

1

3

1

1

0

s

M ={s}

R ={}

U ={a, b, c, d, e}

(30)

s

a

b

c

d

e 2

3 2

6

1

3

1

1

0

ss

a

b

2

3

M ={s}

R={a, b}

U ={c, d, e}

(31)

Beispiel

s

a

b

c

d

e 2

3 2

6

1

3

1

1

0

ss

a

b

2

3

a c

8

M ={s, a}

R={b, c}

U ={d, e}

(32)

s

a

b

c

d

e 2

3 2

6

1

3

1

1

0

ss

a

b

2

3

a c

8

b d

4

M ={s, a, b}

R={c, d}

U ={e}

(33)

Beispiel

s

a

b

c

d

e 2

3 2

6

1

3

1

1

0

ss

a

b

2

3

a c

8

b d

4

d

e

5 7

M ={s, a, b, d}

R ={c, e}

U ={}

(34)

s

a

b

c

d

e 2

3 2

6

1

3

1

1

0

ss

a

b

2

3

a c

8

b d

4

d

e

5 7

e

6

M ={s, a, b, d, e}

R ={c}

U ={}

(35)

Beispiel

s

a

b

c

d

e 2

3 2

6

1

3

1

1

0

ss

a

b

2

3

a c

8

b d

4

d

e

5 7

e

6

c

M ={s, a, b, d, e, c}

R ={}

U ={}

(36)

Zur Implementation: Datenstruktur für R?

Benötigte Operationen:

Insert (Hinzunehmen zuR)

ExtractMin (überR) und DecreaseKey (Update inR) foreachvN+(u) do

if ds[u] +c(u, v)< ds[v]then ds[v]←ds[u] +c(u, v) πs[v]←u

if vR then

DecreaseKey(R, v) // Update einesd(v)im Heap zu R else

RR∪ {v} // Einf¨ugen eines neuen d(v)im Heap zu R

(37)

Zur Implementation: Datenstruktur für R?

Benötigte Operationen:

Insert (Hinzunehmen zuR)

ExtractMin (überR) und DecreaseKey (Update inR) foreachvN+(u) do

if ds[u] +c(u, v)< ds[v]then ds[v]←ds[u] +c(u, v) πs[v]←u

if vR then

DecreaseKey(R, v) // Update einesd(v)im Heap zu R else

RR∪ {v} // Einf¨ugen eines neuen d(v)im Heap zu R

MinHeap!

(38)

DecreaseKey

DecreaseKey: Aufsteigen im MinHeap inO(log|V|)

Problem: Position im Heap unbekannt.

Kompliziert: die Position der Knoten im Heap ändert sich oft, dann muss die Information nachgeführt werden.

(39)

DecreaseKey

DecreaseKey: Aufsteigen im MinHeap inO(log|V|) Problem: Position im Heap unbekannt.

→ Speichern der Position am Knoten (in-place) oder in einer Hashtabelle (extern)

Kompliziert: die Position der Knoten im Heap ändert sich oft, dann muss die Information nachgeführt werden.

(40)

DecreaseKey

DecreaseKey: Aufsteigen im MinHeap inO(log|V|) Problem: Position im Heap unbekannt.

→ Speichern der Position am Knoten (in-place) oder in einer Hashtabelle (extern)

(41)

DecreaseKey

DecreaseKey: Aufsteigen im MinHeap inO(log|V|) Problem: Position im Heap unbekannt.

→ Speichern der Position am Knoten (in-place) oder in einer Hashtabelle (extern)

Kompliziert: die Position der Knoten im Heap ändert sich oft, dann muss die Information nachgeführt werden.

(42)

Lösung: Vermeiden von DecreaseKey

→ Knoten nach erfolgreichem Relaxieren erneut einfügen. Knoten beim Entnehmen als "deleted" kennzeichnen(Lazy Deletion)

(Kein so grosser) Nachteil: Speicherbedarf vom Heap wächst bis zuΘ(|E|).

Da|E| ≤ |V|2, Laufzeiten der Operationen Insert und ExtractMin aber auch in

O(log|V|2) =O(log|V|).

(43)

Laufzeit von Dijkstra

|V|×ExtractMin:O(|V|log|V|)

|E|×Insert oder DecreaseKey:O(|E|log|V|) 1×Init: O(|V|)

Insgesamt17 18 :

O((|V|+|E|) log|V|)

17Für zusammenhängende Graphen:O(|E|log|V|)

18Kann verbessert werden unter Verwendung einer für ExtractMin und DecreaseKey optimierten Datenstruktur (Fibonacci Heap), dann Laufzeit O(|E|+|V|log|V|).

(44)
(45)

Motivation A*

s

t

0 1

1 1

1

2 2

2 2

2 2

2

3 3

3 3

3 3

3 3 4

4 4

4 4

4 4

4 4

4 4

4

Algorithmus von Dijkstra sucht die kürzesten Wege zu allen Knoten, in alle Richtungen

(46)

Motivation A*

s

t 0

1

1 1

1

2 2

2 2

2 2

3

3 3

3 3 4

4 4

4

Algorithmus von Dijkstra sucht die kürzesten Wege zu allen Knoten, in alle Richtungen

(47)

Motivation A*

s

t 0

1

1 1

1

2 2

2 2

2 2

2

3 3

3 3

3 3

3 3 4

4 4

4 4

4 4

4 4

4 4

4

Algorithmus von Dijkstra sucht die kürzesten Wege zu allen Knoten, in alle Richtungen

(48)

Motivation A*

s

t 0

1

1 1

1

2 2

2 2

2 2

2

3

3 3

3 3 4

4 4

4

Algorithmus von Dijkstra sucht die kürzesten Wege zu allen Knoten, in alle Richtungen

(49)

Motivation A*

s

t 0

1

1 1

1

2 2

2 2

2 2

2

3 3

3 3

3 3

3 3

4

4 4

4 4

4 4

4 4

4 4

4

Algorithmus von Dijkstra sucht die kürzesten Wege zu allen Knoten, in alle Richtungen

(50)

Motivation A*

s

t 0

1

1 1

1

2 2

2 2

2 2

2

3 3

3 3

3 3

3 3 4

4 4

4 4

4

4

4

Algorithmus von Dijkstra sucht die kürzesten Wege zu allen Knoten, in alle Richtungen

(51)

Motivation A*

s

t 0

1

1 1

1

2 2

2 2

2 2

2

3 3

3 3

3 3

3 3 4

4 4

4 4

4 4

4 4

4 4

4

Algorithmus von Dijkstra sucht die kürzesten Wege zu allen Knoten, in alle Richtungen

(52)

Motivation A*

s

t

0 1

1 1

1

2 2

2 2

2 2

3

3 3

3 6 7 8

Algorithmus von Dijkstra sucht die kürzesten Wege zu allen Knoten, in alle Richtungen

was richtig ist, da die Stuktur des Graphen dem Algorithmus nicht bekannt ist

(53)

Motivation A*

s

t 0

1

1 1

1

2 2

2 2

2 2

2

3 3

3 3

3 3

3 4

4 4

4

5 5

5 6

6 7 8

Algorithmus von Dijkstra sucht die kürzesten Wege zu allen Knoten, in alle Richtungen

was richtig ist, da die Stuktur des Graphen dem Algorithmus nicht bekannt ist

(54)

Motivation A*

s

t 0

1

1 1

1

2 2

2 2

2 2

3

3 3

3 6 7 8

Algorithmus von Dijkstra sucht die kürzesten Wege zu allen Knoten, in alle Richtungen

was richtig ist, da die Stuktur des Graphen dem Algorithmus nicht bekannt ist

(55)

Motivation A*

s

t 0

1

1 1

1

2 2

2 2

2 2

2

3 3

3 3

3 3

3 4

4 4

4

5 5

5 6

6 7 8

Algorithmus von Dijkstra sucht die kürzesten Wege zu allen Knoten, in alle Richtungen

was richtig ist, da die Stuktur des Graphen dem Algorithmus nicht bekannt ist

(56)

Motivation A*

s

t 0

1

1 1

1

2 2

2 2

2 2

2

3 3

3 3

3 3

3

6 7 8

Algorithmus von Dijkstra sucht die kürzesten Wege zu allen Knoten, in alle Richtungen

was richtig ist, da die Stuktur des Graphen dem Algorithmus nicht bekannt ist

(57)

Motivation A*

s

t 0

1

1 1

1

2 2

2 2

2 2

2

3 3

3 3

3 3

3 4

4 4

4

5 5

5 6

6 7 8

Algorithmus von Dijkstra sucht die kürzesten Wege zu allen Knoten, in alle Richtungen

was richtig ist, da die Stuktur des Graphen dem Algorithmus nicht bekannt ist

(58)

Motivation A*

s

t 0

1

1 1

1

2 2

2 2

2 2

2

3 3

3 3

3 3

3 4

4 4

4

5 5

5

6 7 8

Algorithmus von Dijkstra sucht die kürzesten Wege zu allen Knoten, in alle Richtungen

was richtig ist, da die Stuktur des Graphen dem Algorithmus nicht bekannt ist

(59)

Motivation A*

s

t 0

1

1 1

1

2 2

2 2

2 2

2

3 3

3 3

3 3

3 4

4 4

4

5 5

5 6

6

7 8

Algorithmus von Dijkstra sucht die kürzesten Wege zu allen Knoten, in alle Richtungen

was richtig ist, da die Stuktur des Graphen dem Algorithmus nicht bekannt ist

(60)

Motivation A*

s

t 0

1

1 1

1

2 2

2 2

2 2

2

3 3

3 3

3 3

3 4

4 4

4

5 5

5 6

6 7

Algorithmus von Dijkstra sucht die kürzesten Wege zu allen Knoten, in alle Richtungen

was richtig ist, da die Stuktur des Graphen dem Algorithmus nicht bekannt ist

(61)

Motivation A*

s

t 0

1

1 1

1

2 2

2 2

2 2

2

3 3

3 3

3 3

3 4

4 4

4

5 5

5 6

6 7 8

Algorithmus von Dijkstra sucht die kürzesten Wege zu allen Knoten, in alle Richtungen

was richtig ist, da die Stuktur des Graphen dem Algorithmus nicht bekannt ist

(62)

A* in Action

f(u) =ˆ ds[u]+ˆh(u)h=δx+δy Manhattan-Distanz)

s

t

5 4 3 2 1 0

6 5 4 3 2 1

7 6 5 4 3 2

8 7 6 5 4 3

0 4

1 4 1 6

1 4 1 6

2 6

2 4

2 4 2 6

3 4 3 6

3 8 2 8

2 8

2 3 4

3 10

3 5

6 8

7 8

8 8

Idee: führe den Algorithmus in eine bevorzugte Richtung mit Hilfe einer Abstandsheuristikhˆ Der Wert dieser Heuristik muss den wahren Abstand zu t unterschätzen und wird zum gefundenen Abstanddszus addiert.

(63)

A* in Action

f(u) =ˆ ds[u]+ˆh(u)h=δx+δy Manhattan-Distanz)

s

5 4 3 2 1 0t

6 5 4 3 2 1

7 6 5 4 3 2

8 7 6 5 4 3

9 8 7 6 5 4

0 4

1 4 1 6

1 4 1 6

2 6

2 4

2 4 2 6

3 4 3 6

3 8 2 8

2 8

2 8

3 8

4 8

3 10

3 10

3 10

4 10

5 10

5 8

6 8

7 8

8 8

Idee: führe den Algorithmus in eine bevorzugte Richtung mit Hilfe einer Abstandsheuristikhˆ Der Wert dieser Heuristik muss den wahren Abstand zu t unterschätzen und wird zum gefundenen Abstanddszus addiert.

(64)

A* in Action

f(u) =ˆ ds[u]+ˆh(u)h=δx+δy Manhattan-Distanz)

s

5 4 3 2 1 0t

6 5 4 3 2 1

7 6 5 4 3 2

8 7 6 5 4 3

9 8 7 6 5 4

0 4

1 4 1 6

1 4 1 6

2 6

2 4

2 4 2 6

3 4 3 6

3 8 2 8

2 8

2 3 4

3 10

3 5

6 8

7 8

8 8

Idee: führe den Algorithmus in eine bevorzugte Richtung mit Hilfe einer Abstandsheuristikhˆ Der Wert dieser Heuristik muss den wahren Abstand zu t unterschätzen und wird zum gefundenen Abstanddszus addiert.

(65)

A* in Action

f(u) =ˆ ds[u]+ˆh(u)h=δx+δy Manhattan-Distanz)

s

5 4 3 2 1 0t

6 5 4 3 2 1

7 6 5 4 3 2

8 7 6 5 4 3

9 8 7 6 5 4

0 4

1 4 1 6

1 4 1 6

2 6

2 4

2 4 2 6

3 4 3 6

3 8 2 8

2 8

2 8

3 8

4 8

3 10

3 10

3 10

4 10

5 10

5 8

6 8

7 8

8 8

Idee: führe den Algorithmus in eine bevorzugte Richtung mit Hilfe einer Abstandsheuristikhˆ Der Wert dieser Heuristik muss den wahren Abstand zu t unterschätzen und wird zum gefundenen Abstanddszus addiert.

(66)

A* in Action

f(u) =ˆ ds[u]+ˆh(u)h=δx+δy Manhattan-Distanz)

s

5 4 3 2 1 0t

6 5 4 3 2 1

7 6 5 4 3 2

8 7 6 5 4 3

9 8 7 6 5 4

0 4

1 4 1 6

1 4 1 6

2 6

2 4

2 4 2 6

3 4 3 6

3 8 2 8

2 8

2 3 4

3 10

3 5

6 8

7 8

8 8

Idee: führe den Algorithmus in eine bevorzugte Richtung mit Hilfe einer Abstandsheuristikhˆ Der Wert dieser Heuristik muss den wahren Abstand zu t unterschätzen und wird zum gefundenen Abstanddszus addiert.

(67)

A* in Action

f(u) =ˆ ds[u]+ˆh(u)h=δx+δy Manhattan-Distanz)

s

5 4 3 2 1 0t

6 5 4 3 2 1

7 6 5 4 3 2

8 7 6 5 4 3

9 8 7 6 5 4

0 4

1 4 1 6

1 4 1 6

2 6

2 4

2 4 2 6

3 4 3 6

3 8 2 8

2 8

2 8

3 8

4 8

3 10

3 10

3 10

4 10

5 10

5 8

6 8

7 8

8 8

Idee: führe den Algorithmus in eine bevorzugte Richtung mit Hilfe einer Abstandsheuristikhˆ Der Wert dieser Heuristik muss den wahren Abstand zu t unterschätzen und wird zum gefundenen Abstanddszus addiert.

(68)

A* in Action

f(u) =ˆ ds[u]+ˆh(u)h=δx+δy Manhattan-Distanz)

s

5 4 3 2 1 0t

6 5 4 3 2 1

7 6 5 4 3 2

8 7 6 5 4 3

9 8 7 6 5 4

0 4

1 4 1 6

1 4 1 6

2 6

2 4

2 4 2 6

3 4 3 6

3 8 2 8

2 8

2 8

3 8

4 8

3 10

3 5

6 8

7 8

8 8

Idee: führe den Algorithmus in eine bevorzugte Richtung mit Hilfe einer Abstandsheuristikhˆ Der Wert dieser Heuristik muss den wahren Abstand zu t unterschätzen und wird zum gefundenen Abstanddszus addiert.

(69)

A* in Action

f(u) =ˆ ds[u]+ˆh(u)h=δx+δy Manhattan-Distanz)

s

5 4 3 2 1 0t

6 5 4 3 2 1

7 6 5 4 3 2

8 7 6 5 4 3

9 8 7 6 5 4

0 4

1 4 1 6

1 4 1 6

2 6

2 4

2 4 2 6

3 4 3 6

3 8 2 8

2 8

2 8

3 8

4 8

3 10

3 10

3 10

4 10

5 10

5 8

6 8

7 8

8 8

Idee: führe den Algorithmus in eine bevorzugte Richtung mit Hilfe einer Abstandsheuristikhˆ Der Wert dieser Heuristik muss den wahren Abstand zu t unterschätzen und wird zum gefundenen Abstanddszus addiert.

(70)

A* in Action

f(u) =ˆ ds[u]+ˆh(u)h=δx+δy Manhattan-Distanz)

s

5 4 3 2 1 0t

6 5 4 3 2 1

7 6 5 4 3 2

8 7 6 5 4 3

9 8 7 6 5 4

0 4

1 4 1 6

1 4 1 6

2 6

2 4

2 4 2 6

3 4 3 6

3 8 2 8

2 8

2 8

3 8

4 8

3 10

3 10

3 10

4 10

5 10

5 8

6 8

8

Idee: führe den Algorithmus in eine bevorzugte Richtung mit Hilfe einer Abstandsheuristikhˆ Der Wert dieser Heuristik muss den wahren Abstand zu t unterschätzen und wird zum gefundenen Abstanddszus addiert.

(71)

A* in Action

f(u) =ˆ ds[u]+ˆh(u)h=δx+δy Manhattan-Distanz)

s

5 4 3 2 1 0t

6 5 4 3 2 1

7 6 5 4 3 2

8 7 6 5 4 3

9 8 7 6 5 4

0 4

1 4 1 6

1 4 1 6

2 6

2 4

2 4 2 6

3 4 3 6

3 8 2 8

2 8

2 8

3 8

4 8

3 10

3 10

3 10

4 10

5 10

5 8

6 8

7 8

8 8

Idee: führe den Algorithmus in eine bevorzugte Richtung mit Hilfe einer Abstandsheuristikhˆ Der Wert dieser Heuristik muss den wahren Abstand zu t unterschätzen und wird zum gefundenen Abstanddszus addiert.

(72)

Weg zurückverfolgen

f(u) =ˆ ds[u]+ˆh(u)h=δx+δy)

s

t

4 3 2 1 0

5 4 3 2 1

6 5 4 3 2

7 1 6 0 5 1 4 3 1

6

2 2

8

2 6

2 6

3 6

3 6

3 6 3 8

4 6

4 6 4

8

5 6

6 6

Der Algorithmus funktioniert genauso wie der

Dijkstra-Algorithmus.

Anstelle des Wertes vonds tritt für das Suchen des nächsten

Elements inR der Wert von fˆ= ˆh+ds

(73)

Weg zurückverfolgen

f(u) =ˆ ds[u]+ˆh(u)h=δx+δy)

s

4 3 2 1 0t

5 4 3 2 1

6 5 4 3 2

7 6 5 4 3

8 7 6 5 4

0 6 1 8

1 6 1 8

1 6

2 6

2 8

2 6

2 6

2 8

3 6

3 6

3 8

3 6 3 8

4 6

4 6 4

8

5 6

6 6

Der Algorithmus funktioniert genauso wie der

Dijkstra-Algorithmus.

Anstelle des Wertes vonds tritt für das Suchen des nächsten

Elements inR der Wert von fˆ= ˆh+ds

(74)

Weg zurückverfolgen

f(u) =ˆ ds[u]+ˆh(u)h=δx+δy)

s

4 3 2 1 0t

5 4 3 2 1

6 5 4 3 2

7 6 5 4 3

8 7 6 5 4

0 6

1 1

1 6

2 2

8

2 6

2 6

3 6

3 6

3 6 3 8

4 6

4 6 4

8

5 6

6 6

Der Algorithmus funktioniert genauso wie der

Dijkstra-Algorithmus.

Anstelle des Wertes vonds tritt für das Suchen des nächsten

Elements inR der Wert von fˆ= ˆh+ds

(75)

Weg zurückverfolgen

f(u) =ˆ ds[u]+ˆh(u)h=δx+δy)

s

4 3 2 1 0t

5 4 3 2 1

6 5 4 3 2

7 6 5 4 3

8 7 6 5 4

0 6 1 8

1 6 1 8

1 6

2 6

2 8

2 6

2 6

2 8

3 6

3 6

3 8

3 6 3 8

4 6

4 6 4

8

5 6

6 6

Der Algorithmus funktioniert genauso wie der

Dijkstra-Algorithmus.

Anstelle des Wertes vonds tritt für das Suchen des nächsten

Elements inR der Wert von fˆ= ˆh+ds

(76)

Weg zurückverfolgen

f(u) =ˆ ds[u]+ˆh(u)h=δx+δy)

s

4 3 2 1 0t

5 4 3 2 1

6 5 4 3 2

7 6 5 4 3

8 7 6 5 4

0 6 1 8

1 6 1 8

1 6

2 6

2 8

2 6

2 6

2 8

3 6

3 6

3 6 3 8

4 6

4 6 4

8

5 6

6 6

Der Algorithmus funktioniert genauso wie der

Dijkstra-Algorithmus.

Anstelle des Wertes vonds tritt für das Suchen des nächsten

Elements inR der Wert von fˆ= ˆh+ds

(77)

Weg zurückverfolgen

f(u) =ˆ ds[u]+ˆh(u)h=δx+δy)

s

4 3 2 1 0t

5 4 3 2 1

6 5 4 3 2

7 6 5 4 3

8 7 6 5 4

0 6 1 8

1 6 1 8

1 6

2 6

2 8

2 6

2 6

2 8

3 6

3 6

3 8

3 6 3 8

4 6

4 6 4

8

5 6

6 6

Der Algorithmus funktioniert genauso wie der

Dijkstra-Algorithmus.

Anstelle des Wertes vonds tritt für das Suchen des nächsten

Elements inR der Wert von fˆ= ˆh+ds

(78)

Weg zurückverfolgen

f(u) =ˆ ds[u]+ˆh(u)h=δx+δy)

s

4 3 2 1 0t

5 4 3 2 1

6 5 4 3 2

7 6 5 4 3

8 7 6 5 4

0 6 1 8

1 6 1 8

1 6

2 6

2 8

2 6

2 6

2 8

3 6

3 6

3 8

3 6 3 8

4 6

4 6 4

8

Der Algorithmus funktioniert genauso wie der

Dijkstra-Algorithmus.

Anstelle des Wertes vonds tritt für das Suchen des nächsten

Elements inR der Wert von fˆ= ˆh+ds

(79)

Weg zurückverfolgen

f(u) =ˆ ds[u]+ˆh(u)h=δx+δy)

s

4 3 2 1 0t

5 4 3 2 1

6 5 4 3 2

7 6 5 4 3

8 7 6 5 4

0 6 1 8

1 6 1 8

1 6

2 6

2 8

2 6

2 6

2 8

3 6

3 6

3 8

3 6 3 8

4 6

4 6 4

8

5 6

6 6

Der Algorithmus funktioniert genauso wie der

Dijkstra-Algorithmus.

Anstelle des Wertes vonds tritt für das Suchen des nächsten

Elements inR der Wert von fˆ= ˆh+ds

(80)

f(u) =ˆ ds[u]+ˆh(u)h=δx+δy)

s

4 3 2 1 0t

5 4 3 2 1

6 5 4 3 2

7 6 5 4 3

8 7 6 5 4

0 6 1 8

1 6 1 8

1 6

2 6

2 8

2 6

2 6

2 8

3 6

3 6

3 8

3 6 3 8

4 6

4 6 4

8

5 6

6 6

Der Algorithmus funktioniert genauso wie der

Dijkstra-Algorithmus.

Anstelle des Wertes vonds tritt für das Suchen des nächsten

Elements inR der Wert von fˆ= ˆh+ds

(81)

Weg zurückverfolgen

f(u) =ˆ ds[u]+ˆh(u)h=δx+δy)

s

4 3 2 1 0t

5 4 3 2 1

6 5 4 3 2

7 6 5 4 3

8 7 6 5 4

0 6 1 8

1 6 1 8

1 6

2 6

2 8

2 6

2 6

2 8

3 6

3 6

3 8

3 6 3 8

4 6

4 6 4

8

5 6

6 6

Der Algorithmus funktioniert genauso wie der

Dijkstra-Algorithmus.

Anstelle des Wertes vonds tritt für das Suchen des nächsten

Elements inR der Wert von fˆ= ˆh+ds

(82)

Voraussetzungen

Positiv gewichteter, endlicher GraphG= (V, E, c) sV,tV

Abstandsschätzunghbt(v)≤ht(v) :=δ(v, t)vV. Gesucht: kürzester Pfad p:s t

(83)

A*-Algorithmus(G, s, t, h) ˆ

Input: Positiv gewichteter Graph G= (V, E, c), Startpunkt sV, Endpunkt tV, Sch¨atzung bh(v)δ(v, t)

Output: Existenz und Wert eines k¨urzesten Pfades vonsnach t foreachuV do

d[u]← ∞;fb[u]← ∞;π[u]←null d[s]←0;f[s]bbh(s);R ← {s};M ← {}

whileR 6=∅do u← ExtractMin

fb(R);MM ∪ {u}

if u=tthen return success

foreach vN+(u) with d[v]> d[u] +c(u, v) do d[v]d[u] +c(u, v);fb[v]←d[v] +bh(v);π[v]u RR∪ {v};MM− {v}

returnfailure

(84)

Was, wenn h ˆ nicht unterschätzt

f(u) =ˆ ds[u]+ˆh(u)h=δ2x+δy2)

s

t

16 9 4 1 0

17 10 5 2 1

20 13 8 5 4

25 118 013 110 9 1

14

2 2 10

3 13

3 8 4 14

4 6

5 14 5 22

6 22

6 10 5 14

6 10

7 8

8 8 6

22

Algorithmus kann mit dem falschen Resultat terminieren, wennˆhdie Distanz zutnicht unterschätzt.

obwohl die Heuristik ansonsten vernünftig aussieht (sie ist z.B.

monoton)

(85)

Was, wenn h ˆ nicht unterschätzt

f(u) =ˆ ds[u]+ˆh(u)h=δ2x+δy2)

s

16 9 4 1 0t

17 10 5 2 1

20 13 8 5 4

25 18 13 10 9 32 25 20 17 16

0 18 1 26

1 14 1 26

1 14

2 12

2 10

2 22

3 13

3 8 4 14

4 6 3 20

5 14 5 22

6 22

6 10 5 14

6 10

7 8

8 8 6

22

Algorithmus kann mit dem falschen Resultat terminieren, wennˆhdie Distanz zutnicht unterschätzt.

obwohl die Heuristik ansonsten vernünftig aussieht (sie ist z.B.

monoton)

(86)

Was, wenn h ˆ nicht unterschätzt

f(u) =ˆ ds[u]+ˆh(u)h=δ2x+δy2)

s

16 9 4 1 0t

17 10 5 2 1

20 13 8 5 4

25 18 13 10 9 32 25 20 17 16

0 18

1 1

1 14

2 2 10

3 13

3 8 4 14

4 6

5 14 5 22

6 22

6 10 5 14

6 10

7 8

8 8 6

22

Algorithmus kann mit dem falschen Resultat terminieren, wennˆhdie Distanz zutnicht unterschätzt.

obwohl die Heuristik ansonsten vernünftig aussieht (sie ist z.B.

monoton)

(87)

Was, wenn h ˆ nicht unterschätzt

f(u) =ˆ ds[u]+ˆh(u)h=δ2x+δy2)

s

16 9 4 1 0t

17 10 5 2 1

20 13 8 5 4

25 18 13 10 9 32 25 20 17 16

0 18 1 26

1 14 1 26

1 14

2 12

2 10

2 22

3 13

3 8 4 14

4 6 3 20

5 14 5 22

6 22

6 10 5 14

6 10

7 8

8 8 6

22

Algorithmus kann mit dem falschen Resultat terminieren, wennˆhdie Distanz zutnicht unterschätzt.

obwohl die Heuristik ansonsten vernünftig aussieht (sie ist z.B.

monoton)

(88)

Was, wenn h ˆ nicht unterschätzt

f(u) =ˆ ds[u]+ˆh(u)h=δ2x+δy2)

s

16 9 4 1 0t

17 10 5 2 1

20 13 8 5 4

25 18 13 10 9 32 25 20 17 16

0 18 1 26

1 14 1 26

1 14

2 12

2 10

2 22

3 13

3 8 4 14

4 6

5 14 5 22

6 22

6 10 5 14

6 10

7 8

8 8 6

22

Algorithmus kann mit dem falschen Resultat terminieren, wennˆhdie Distanz zutnicht unterschätzt.

obwohl die Heuristik ansonsten vernünftig aussieht (sie ist z.B.

monoton)

(89)

Was, wenn h ˆ nicht unterschätzt

f(u) =ˆ ds[u]+ˆh(u)h=δ2x+δy2)

s

16 9 4 1 0t

17 10 5 2 1

20 13 8 5 4

25 18 13 10 9 32 25 20 17 16

0 18 1 26

1 14 1 26

1 14

2 12

2 10

2 22

3 13

3 8

4 14

4 6 3 20

5 14 5 22

6 22

6 10 5 14

6 10

7 8

8 8 6

22

Algorithmus kann mit dem falschen Resultat terminieren, wennˆhdie Distanz zutnicht unterschätzt.

obwohl die Heuristik ansonsten vernünftig aussieht (sie ist z.B.

monoton)

(90)

Was, wenn h ˆ nicht unterschätzt

f(u) =ˆ ds[u]+ˆh(u)h=δ2x+δy2)

s

16 9 4 1 0t

17 10 5 2 1

20 13 8 5 4

25 18 13 10 9 32 25 20 17 16

0 18 1 26

1 14 1 26

1 14

2 12

2 10

2 22

3 13

3 8 4 14

4 6

5 14 5 22

6 22

6 10 5 14

6 10

7 8

8 8 6

22

Algorithmus kann mit dem falschen Resultat terminieren, wennˆhdie Distanz zutnicht unterschätzt.

obwohl die Heuristik ansonsten vernünftig aussieht (sie ist z.B.

monoton)

(91)

Was, wenn h ˆ nicht unterschätzt

f(u) =ˆ ds[u]+ˆh(u)h=δ2x+δy2)

s

16 9 4 1 0t

17 10 5 2 1

20 13 8 5 4

25 18 13 10 9 32 25 20 17 16

0 18 1 26

1 14 1 26

1 14

2 12

2 10

2 22

3 13

3 8 4 14

4 6 3 20

5 14 5 22

6 22

6 10 5 14

6 10

7 8

8 8 6

22

Algorithmus kann mit dem falschen Resultat terminieren, wennˆhdie Distanz zutnicht unterschätzt.

obwohl die Heuristik ansonsten vernünftig aussieht (sie ist z.B.

monoton)

(92)

Was, wenn h ˆ nicht unterschätzt

f(u) =ˆ ds[u]+ˆh(u)h=δ2x+δy2)

s

16 9 4 1 0t

17 10 5 2 1

20 13 8 5 4

25 18 13 10 9 32 25 20 17 16

0 18 1 26

1 14 1 26

1 14

2 12

2 10

2 22

3 13

3 8 4 14

4 6 3 20

5 14 5 22

Algorithmus kann mit dem falschen Resultat terminieren, wennˆhdie Distanz zutnicht unterschätzt.

obwohl die Heuristik ansonsten vernünftig aussieht (sie ist z.B.

monoton)

(93)

Was, wenn h ˆ nicht unterschätzt

f(u) =ˆ ds[u]+ˆh(u)h=δ2x+δy2)

s

16 9 4 1 0t

17 10 5 2 1

20 13 8 5 4

25 18 13 10 9 32 25 20 17 16

0 18 1 26

1 14 1 26

1 14

2 12

2 10

2 22

3 13

3 8 4 14

4 6 3 20

5 14 5 22

6 22

6 10

5 14

6 10

7 8

8 8 6

22

Algorithmus kann mit dem falschen Resultat terminieren, wennˆhdie Distanz zutnicht unterschätzt.

obwohl die Heuristik ansonsten vernünftig aussieht (sie ist z.B.

monoton)

(94)

f(u) =ˆ ds[u]+ˆh(u)h=δx+δy)

s

16 9 4 1 0t

17 10 5 2 1

20 13 8 5 4

25 18 13 10 9 32 25 20 17 16

0 18 1 26

1 14 1 26

1 14

2 12

2 10

2 22

3 13

3 8 4 14

4 6 3 20

5 14 5 22

6 22

6 10 5 14

6 10

7 8

8 8 6

22

Algorithmus kann mit dem falschen Resultat terminieren, wennˆhdie Distanz zutnicht unterschätzt.

obwohl die Heuristik ansonsten vernünftig aussieht (sie ist z.B.

monoton)

(95)

Was, wenn h ˆ nicht unterschätzt

f(u) =ˆ ds[u]+ˆh(u)h=δ2x+δy2)

s

16 9 4 1 0t

17 10 5 2 1

20 13 8 5 4

25 18 13 10 9 32 25 20 17 16

0 18 1 26

1 14 1 26

1 14

2 12

2 10

2 22

3 13

3 8 4 14

4 6 3 20

5 14 5 22

6 22

6 10 5 14

6 10

7 8

8 8 6

22

Algorithmus kann mit dem falschen Resultat terminieren, wennˆhdie Distanz zutnicht unterschätzt.

obwohl die Heuristik ansonsten vernünftig aussieht (sie ist z.B.

monoton)

(96)

und sie später wieder einfügen.

Das kann zu suboptimalem Verhalten im Sinne der Laufzeit des Algorithmus führen.

Wennbhzusätzlich zur Zulässigkeit (h(v)bh(v)für allevV) auch noch monoton ist, d.h. wenn für alle(u, u0)∈E:

bh(u0)≤bh(u) +c(u0, u)

dann ist der A* Algorithmus äquivalent zum Dijkstra-Algorithmus mit Kantengewichten˜c(u, v) =c(u, v) +bh(u)bh(v)und kein Knoten wird aus Rentnommen und wieder eingefügt.

(97)

Ein verrücktes h ˆ

f(u) =ˆ ds[u]+ˆh(u)

s

t

8 7 6 5 4

7 0 0 0 3

6 5 1 0 2

5 0 0 0 1

4 0 2 1 0

0 0 1 8

1 1 1 8

1 6

2 8

2 2

2 2 3 8

3 3

3 3

4 4 4

4

5 5 5 10

6 8 6

10 2 8

6 10

2 2

3 3 3 8

4 8

4 6 4 6 4 6

5 6

6 6

Algorithmus terminert mit dem korrekten Resultat, auch wenn die Abstandsheuristik nicht monoton ist

Dann kann es kann vorkommen, dass Knoten mehrfach ausR entnommen und wieder eingefügt werden.

(98)

Ein verrücktes h ˆ

f(u) =ˆ ds[u]+ˆh(u)

s

t

8 7 6 5 4

7 0 0 0 3

6 5 1 0 2

5 0 0 0 1

4 0 2 1 0

0

1 1

1 6

2 2

2 3 3

3 3

4 4 4

4

5 5 5 10

6 8 6

10 2 8

6 10

2 2

3 3 3 8

4 8

4 6 4 6 4 6

5 6

6 6

Algorithmus terminert mit dem korrekten Resultat, auch wenn die Abstandsheuristik nicht monoton ist

Dann kann es kann vorkommen, dass Knoten mehrfach ausR entnommen und wieder eingefügt werden.

(99)

Ein verrücktes h ˆ

f(u) =ˆ ds[u]+ˆh(u)

s

t

8 7 6 5 4

7 0 0 0 3

6 5 1 0 2

5 0 0 0 1

4 0 2 1 0

0 0

1 8

1 1 1 8

1 6

2 8

2 2

2 2 3 8

3 3

3 3

4 4 4

4

5 5 5 10

6 8 6

10 2 8

6 10

2 2

3 3 3 8

4 8

4 6 4 6 4 6

5 6

6 6

Algorithmus terminert mit dem korrekten Resultat, auch wenn die Abstandsheuristik nicht monoton ist

Dann kann es kann vorkommen, dass Knoten mehrfach ausR entnommen und wieder eingefügt werden.

(100)

Ein verrücktes h ˆ

f(u) =ˆ ds[u]+ˆh(u)

s

t

8 7 6 5 4

7 0 0 0 3

6 5 1 0 2

5 0 0 0 1

4 0 2 1 0

0 0 1 8

1 1 1 8

1 6

2 2

2 3 3

3 3

4 4 4

4

5 5 5 10

6 8 6

10 2 8

6 10

2 2

3 3 3 8

4 8

4 6 4 6 4 6

5 6

6 6

Algorithmus terminert mit dem korrekten Resultat, auch wenn die Abstandsheuristik nicht monoton ist

Dann kann es kann vorkommen, dass Knoten mehrfach ausR entnommen und wieder eingefügt werden.

(101)

Ein verrücktes h ˆ

f(u) =ˆ ds[u]+ˆh(u)

s

t

8 7 6 5 4

7 0 0 0 3

6 5 1 0 2

5 0 0 0 1

4 0 2 1 0

0 0 1 8

1 1 1 8

1 6

2 8

2 2

2 2

3 8

3 3

3 3

4 4 4

4

5 5 5 10

6 8 6

10 2 8

6 10

2 2

3 3 3 8

4 8

4 6 4 6 4 6

5 6

6 6

Algorithmus terminert mit dem korrekten Resultat, auch wenn die Abstandsheuristik nicht monoton ist

Dann kann es kann vorkommen, dass Knoten mehrfach ausR entnommen und wieder eingefügt werden.

(102)

Ein verrücktes h ˆ

f(u) =ˆ ds[u]+ˆh(u)

s

t

8 7 6 5 4

7 0 0 0 3

6 5 1 0 2

5 0 0 0 1

4 0 2 1 0

0 0 1 8

1 1 1 8

1 6

2 8

2 2

2 2 3 8

3 3

3 3

4 4

5 5 5

6 8 6

10 6 10

2 3 3 3 4 8

4 6 4 6 4 6

5 6

6 6

Algorithmus terminert mit dem korrekten Resultat, auch wenn die Abstandsheuristik nicht monoton ist

Dann kann es kann vorkommen, dass Knoten mehrfach ausR entnommen und wieder eingefügt werden.

(103)

Ein verrücktes h ˆ

f(u) =ˆ ds[u]+ˆh(u)

s

t

8 7 6 5 4

7 0 0 0 3

6 5 1 0 2

5 0 0 0 1

4 0 2 1 0

0 0 1 8

1 1 1 8

1 6

2 8

2 2

2 2 3 8

3 3

3 3

4 4 4

4

5 5 5 10

6 8 6

10 2 8

6 10

2 2

3 3 3 8

4 8

4 6 4 6 4 6

5 6

6 6

Algorithmus terminert mit dem korrekten Resultat, auch wenn die Abstandsheuristik nicht monoton ist

Dann kann es kann vorkommen, dass Knoten mehrfach ausR entnommen und wieder eingefügt werden.

(104)

Ein verrücktes h ˆ

f(u) =ˆ ds[u]+ˆh(u)

s

t

8 7 6 5 4

7 0 0 0 3

6 5 1 0 2

5 0 0 0 1

4 0 2 1 0

0 0 1 8

1 1 1 8

1 6

2 8

2 2

2 2 3 8

3 3

3 3

4 4 4

4

5 5 5 10

6 8 6

10 6 10

2 3 3 3 4 8

4 6 4 6 4 6

5 6

6 6

Algorithmus terminert mit dem korrekten Resultat, auch wenn die Abstandsheuristik nicht monoton ist

Dann kann es kann vorkommen, dass Knoten mehrfach ausR entnommen und wieder eingefügt werden.

(105)

Ein verrücktes h ˆ

f(u) =ˆ ds[u]+ˆh(u)

s

t

8 7 6 5 4

7 0 0 0 3

6 5 1 0 2

5 0 0 0 1

4 0 2 1 0

0 0 1 8

1 1 1 8

1 6

2 8

2 2

2 2 3 8

3 3

3 3

4 4 4

4

5 5 5 10

6 8 6

10

2 8

6 10

2 2

3 3 3 8

4 8

4 6 4 6 4 6

5 6

6 6

Algorithmus terminert mit dem korrekten Resultat, auch wenn die Abstandsheuristik nicht monoton ist

Dann kann es kann vorkommen, dass Knoten mehrfach ausR entnommen und wieder eingefügt werden.

(106)

Ein verrücktes h ˆ

f(u) =ˆ ds[u]+ˆh(u)

s

t

8 7 6 5 4

7 0 0 0 3

6 5 1 0 2

5 0 0 0 1

4 0 2 1 0

0 0 1 8

1 1 1 8

1 6

2 8

2 2

2 2 3 8

3 3

3 3

4 4 4

4

5 5 5 10

6 8 6

10 2 8

6 10

2 2

3

4 444 5 6

Algorithmus terminert mit dem korrekten Resultat, auch wenn die Abstandsheuristik nicht monoton ist

Dann kann es kann vorkommen, dass Knoten mehrfach ausR entnommen und wieder eingefügt werden.

(107)

Ein verrücktes h ˆ

f(u) =ˆ ds[u]+ˆh(u)

s

t

8 7 6 5 4

7 0 0 0 3

6 5 1 0 2

5 0 0 0 1

4 0 2 1 0

0 0 1 8

1 1 1 8

1 6

2 8

2 2

2 2 3 8

3 3

3 3

4 4 4

4

5 5 5 10

6 8 6

10 2 8

6 10

2 2

3 3 3 8

4 8

4 6 4 6 4 6

5 6

6 6

Algorithmus terminert mit dem korrekten Resultat, auch wenn die Abstandsheuristik nicht monoton ist

Dann kann es kann vorkommen, dass Knoten mehrfach ausR entnommen und wieder eingefügt werden.

(108)

Ein verrücktes h ˆ

f(u) =ˆ ds[u]+ˆh(u)

s

t

8 7 6 5 4

7 0 0 0 3

6 5 1 0 2

5 0 0 0 1

4 0 2 1 0

0 0 1 8

1 1 1 8

1 6

2 8

2 2

2 2 3 8

3 3

3 3

4 4 4

4

5 5 5 10

6 8 6

10 2 8

6 10

2 2

3 3 3 8

4 8

4 6

Algorithmus terminert mit dem korrekten Resultat, auch wenn die Abstandsheuristik nicht monoton ist

Dann kann es kann vorkommen, dass Knoten mehrfach ausR entnommen und wieder eingefügt werden.

Referenzen

ÄHNLICHE DOKUMENTE

Da heuer aber einige Feiertage für die Wahl etwas ungünstig fallen, werden wir aller Voraussicht nach nicht, wie in den letzten Jahren üblich, Mitte Mai, sondern erst Anfang Juni

After having established the quoted result for Floyd's algorithm, it is used for a derivation of the expected number of interchanges, and of comparisons, which

Und wenn ich das tue, möchte ich auch nicht Toleranz in Anspruch nehmen müssen - Toleranz würde ja nur bedeuten, dass ich zwar schon was und womöglich begründet dagegen habe,

Die Schnittstelle ist durch die abstrakte Klasse Priority- Queue gegeben: offer fügt ein Zeichen ein; poll liefert das größte Zeichen und entfernt es; size liefert die Anzahl

■ Definieren Sie für alle Klassen, Methoden und Felder die geeignete Sichtbarkeit (pri- vate, protected, package, public). ■ Verwenden Sie die Methode DotMaker.makeDotForHeap

Die Methode compare(obj1, obj2) von Comparator gibt einen negativen Wert zurück, wenn obj1 kleiner als obj2 ist, oder einen positiven Wert, wenn obj1 größer als obj2 ist}. Ein

So werden zum Beispiel Sprays oder Shampoos für Hunde und Katzen auch in Tier- fachmärkten oder Drogeriemärkten verkauft.. Apothekenpflichtige Arz- neimittel sind solche, die

Vom Haarspray im Badezimmer bis hin zum Rasen- dünger im Garten werden die Eintei- lungen und Kennzeichnungen nun für alles verwendet, was eine Gefahr für Mensch und