Spezialvorlesung
Suchalgorithmen
Thema:
Einzelzustandsraumsuche
Stefan Edelkamp
Struktur des Buchs
Überblick
Heuristiken und Graphabstraktionen
Verbindung Dijkstra und A*
Datenstrukturen
Vorrangwarteschlangen (State-of-the-Art)
Hash-Tabellen (State-of-the-Art)
Speicherplatzbeschränkte Suche
DFID + IDA*, Anomalie
Frontier-Suche
BFHS + Lokalität
Überblick
Heuristiken und Graphabstraktionen
Verbindung Dijkstra und A*
Datenstrukturen
Vorrangwarteschlangen (State-of-the-Art)
Hash-Tabellen (State-of-the-Art)
Speicherplatzbeschränkte Suche
DFID + IDA*, Anomalie
Frontier-Suche
BFHS + Lokalität
Heuristiken
h konsistent 0 ≤ w(u,v) + h(v) – h(u)
h zulässig h(u) ≤ h*(u)
Satz: Konsistenz impliziert Zulässigkeit
Beweis: Sei p = (s=v0,…vk=t) beliebiger Pfad
h(u) ≤ h*(u)
Graphabstraktion durch
Knotenkontraktion
Additiv:
Nicht-Additiv:
Überblick
Heuristiken und Graphabstraktionen
Verbindung Dijkstra und A*
Datenstrukturen
Vorrangwarteschlangen (State-of-the-Art)
Hash-Tabellen (State-of-the-Art)
Speicherplatzbeschränkte Suche
DFID + IDA*, Anomalie
Frontier-Suche
BFHS + Lokalität
Dijkstra´s Kürzeste Wege
Algorithmus
Initialisierung: f(s) = 0, f(u) = unendlich, falls u <> s
Auswahl: u mit f(u) = min { f(v) | v ist in Open }
Update: f(v) = min { f(v), f(u) + w(u,v) | v ist Nachfolger von u }
A* = Dijkstra + Neubewertung
der Kantengewichte
h konsistent 0 ≤ w(u,v) + h(v) – h(u)
neues Kantengewicht nicht negativ
Initialisierung: f(s) = h(s), f(u) = unendlich, falls u <> s
Auswahl: u mit f(u) = min { f(v) | v ist in Open }
Update: f(v) = min { f(v), f(u) + w(u,v) +h(v) – h(u) |
v ist Nachfolger von u }
Vor- und nach der Neubewertung
der Kantengewichte
Problem: Negative Kantengewichte
Wiederöffnung bereits expandierter Knoten
Überblick
Heuristiken und Graphabstraktionen
Verbindung Dijkstra und A*
Datenstrukturen
Vorrangwarteschlangen (State-of-the-Art)
Hash-Tabellen (State-of-the-Art)
Speicherplatzbeschränkte Suche
DFID + IDA*, Anomalie
Frontier-Suche
BFHS + Lokalität
Datenstrukturen (1):
Vorrangwarteschlangen
Neu in 2005: Relaxed Weak Queues (Katajainen,
Elmasry. Jensen): Insert/DecreaseKey: O(1) und
DeleteMin O(log n) worst-case mit „einfacher“
Datenstruktur als Fibonacci-Heaps!
Weak-Heaps
Merging
zweier
WHs:
Relaxierte Weak-Queues
(Heap-geordneter) Bin-baum == Perfekter (balancierter) WH
Binomialqueue: Dualdarstellungsanordnung von Bin-bäumen
Weak-Queue: Dualdarstellungsanordnung von WHs
Relaxierte Weak-Queue: Liste von WHs nahe
Dualdarstellungsanordnung + wenige Anordnungsfehler
Überblick
Heuristiken und Graphabstraktionen
Verbindung Dijkstra und A*
Datenstrukturen
Vorrangwarteschlangen (State-of-the-Art)
Hash-Tabellen (State-of-the-Art)
Speicherplatzbeschränkte Suche
DFID + IDA*, Anomalie
Frontier-Suche
BFHS + Lokalität
Datenstrukturen (2):
Hash-Tabellen
Neu in 2003: Cuckoo Hashing (Pagh et al.):
Insert: O(1) amortisiert und Lookup O(1) worst-case
mit „einfacher“ Datenstruktur!
Cuckoo-Hashing
Einfügen:
Problem:
Rehash der gesamten
Tabelle
Suffix-Lists
Bit-State Hashing
Single Bit-State
Double Bit-State
Überblick
Heuristiken und Graphabstraktionen
Verbindung Dijkstra und A*
Datenstrukturen
Vorrangwarteschlangen (State-of-the-Art)
Hash-Tabellen (State-of-the-Art)
Speicherplatzbeschränkte Suche
DFID + IDA*, Anomalie
Frontier-Suche
BFHS + Lokalität
DFID und IDA*
DFID (depth-first iterative-deepening):
simuliert die Breitensuche mit stetig
ansteigender
Kostenschranke:
f(n) = g(n)
IDA* (iterative-deepening A*)
simuliert A* mit stetig ansteigender
Kostenschranke
f(u)=g(u)+h(u)
Analyse IDA*
Anzahl erwarteter Knoten, die
von IDA* bis zur Kostenschranke c
in einem Suchbaum mit Ni Knoten
in Tiefe i expandiert werden
Anomalie Tiefensuche +
Tiefenschranke
Wiederöffnung bereits expandierter Knoten
Überblick
Heuristiken und Graphabstraktionen
Verbindung Dijkstra und A*
Datenstrukturen
Vorrangwarteschlangen (State-of-the-Art)
Hash-Tabellen (State-of-the-Art)
Speicherplatzbeschränkte Suche
DFID + IDA*, Anomalie
Frontier-Suche
BFHS + Lokalität
Frontier-Suche (1):
Genutzte Operatoren
Frontier-Suche (2):
Munagala & Ranade
I: Lösche Duplikate
in aktuell generierter
BFS-Schicht
A
B
C
D
t
t+1
X
Y
Z
A
X
t+2
A
X
Y
Z
II:
Subtrahiere
BFSSchichten t
und t+1 von
t+2.
X
Y
Z
Überblick
Heuristiken und Graphabstraktionen
Verbindung Dijkstra und A*
Datenstrukturen
Vorrangwarteschlangen (State-of-the-Art)
Hash-Tabellen (State-of-the-Art)
Speicherplatzbeschränkte Suche
DFID + IDA*, Anomalie
Frontier-Suche
BFHS + Lokalität
Breadth-First Heuristic Search