www.wikidata.de-de.nina.az
Die iterative Tiefensuche englisch iterative deepening depth first search IDDFS ist ein Verfahren aus der Informatik zum Suchen eines Knotens in einem Graphen Der Algorithmus kombiniert die wunschenswerten Eigenschaften von Tiefensuche geringer Speicherverbrauch und Breitensuche Optimalitat Die iterative Tiefensuche ist wie die normale Tiefensuche eine uninformierte Suche Sie funktioniert wie die Tiefensuche vermeidet jedoch durch Begrenzung der Suchtiefe deren Nachteile bezuglich Vollstandigkeit Bei der iterativen Tiefensuche wird iterativ eine beschrankte Tiefensuche durchgefuhrt und dabei das Level bis zu welchem die Beschrankte Tiefensuche den Graphen erkundet bei jeder Iteration um eins erhoht Im ersten Schritt werden also alle Knoten zu denen ein Pfad der Lange 0 fuhrt mittels Tiefensuche erkundet Im nachsten Schritt werden dann alle Knoten zu denen ein Pfad der Lange 1 fuhrt mittels Tiefensuche erkundet und so weiter Hierdurch wird erreicht dass Iterative Tiefensuche prinzipiell auf allen Graphen vollstandig ist da die Suche sich nun nicht mehr in einem endlos langen Pfad verlieren kann Damit stellt die iterative Tiefensuche eine Kombination der Tiefen und der Breitensuche dar Sie hat einerseits den gleichen Speicherplatzverbrauch wie die normale Tiefensuche im Arbeitsspeicher muss jeweils maximal ein kompletter Ast bis zur momentanen Iterationstiefe gespeichert werden liefert aber bei monoton steigenden Pfadkosten ebenso wie die Breitensuche eine optimale Losung Da fur jede neue Iteration auch der bereits durchlaufene Suchbaum komplett neu aufgebaut werden muss ist die Laufzeit hoher als bei normaler Tiefensuche Da in einem Suchbaum aber jeweils der grosste Teil der Knoten Blatter sind ist dieser geringe Mehraufwand gegenuber den Vorteilen hinnehmbar Inhaltsverzeichnis 1 Algorithmus informell 2 Algorithmus formal 3 Algorithmusbeispiel Erzeugen des Tiefensuchwaldes iterativ 4 Eigenschaften 4 1 Speicherplatzverbrauch 4 2 Laufzeit 4 3 Vollstandigkeit 4 4 Optimalitat 5 LiteraturAlgorithmus informell BearbeitenBestimme den Knoten an dem die Suche beginnen soll Rufe Beschrankte Tiefensuche mit der aktuellen Suchtiefe auf Erhohe die Suchtiefe um 1 und gehe zu Schritt 2Algorithmus formal BearbeitenIterative Tiefensuche Knoten Ziel IterationsTiefe 0 while IterationsTiefe lt unendlich Beschrankte Tiefensuche Knoten Ziel IterationsTiefe IterationsTiefe IterationsTiefe 1 Algorithmusbeispiel Erzeugen des Tiefensuchwaldes iterativ BearbeitenDer folgende iterative Algorithmus erzeugt den Tiefensuchwald eines Graphen G mittels Setzen von Discovery und Finishing Times und Farben der Knoten In Anlehnung an Cormen Leiserson Rivest Stein Introduction to Algorithms MIT Press 2001 werden zunachst alle Knoten weiss gefarbt Anschliessend startet die Tiefensuche per Definition beim alphabetisch kleinsten Knoten und farbt diesen grau Danach wird ein Stack verwendet worin der bereits entdeckte Weg bis zu einem Knoten ohne weissen Nachbarn gespeichert wird Alle Knoten im Stack sind grau Der Stack wird abgetragen bis einer der gespeicherten Knoten noch einen weiteren weissen Nachbarn hat oder der Stack leer ist Damit wird das der Rekursion eigene Backtracking simuliert Die vorgefertigte Methode nextw u liefert fur einen Knoten u den per Definition alphabetisch kleinsten weissen Nachbarn Existiert kein solcher liefert sie NULL bzw FALSE for each v of G Initialisierung col v w Alle Knoten weiss farben und pi v null Vorganger auf null setzen time 0 S 0 Stack S initialisieren for each u of G fur alle weissen Knoten u if col u w time Zeitzahler erhohen col u g Aktuellen Knoten grau farben d u time Entdeckzeit setzen push S u Aktuellen Knoten auf Stack while S 0 Solange Stack belegt ist time Zeitzahler erhohen v nextw u if v null wenn nachster weisser Nachbar col v g v grau farben d v time Entdeckzeit setzen pi v u Vorganger setzen if nextw v null push S v u v Aktueller Knoten ist v else wenn v NULL col u s Aktuellen Knoten schwarz farben f u time Finishing Time setzen if S 0 u pop S neuer aktueller Knoten von Stack if col u g push S u Solange Knoten noch nicht Schwarz wieder auf den Stack nextw u for each node of adj u if col node w return node return null Eigenschaften BearbeitenSpeicherplatzverbrauch Bearbeiten Da intern auf Tiefensuche zuruckgegriffen wird ist der Speicherplatzbedarf ahnlich dem der normalen Tiefensuche Laufzeit Bearbeiten Da im schlimmsten Fall alle moglichen Pfade zu allen moglichen Knoten betrachtet werden mussen betragt die Laufzeit von Iterativer Tiefensuche O V E displaystyle mathcal O vert V vert vert E vert nbsp wobei V displaystyle vert V vert nbsp fur die Anzahl der Knoten und E displaystyle vert E vert nbsp fur die Anzahl der Kanten im Graph steht Vollstandigkeit Bearbeiten Da sich Iterative Tiefensuche weder in unendlich langen Pfaden noch in Zyklen verlieren kann ist der Algorithmus vollstandig Optimalitat Bearbeiten Iterative Tiefensuche ist optimal falls alle Pfadkosten aquivalent sind da Tiefensuche in diesem Fall den kurzesten Pfad zu einem Ziel findet Sind die Pfadkosten jedoch nicht aquivalent so kann es wie bei der Breitensuche dazu kommen dass ein suboptimaler Pfad gewahlt wird Literatur BearbeitenStuart Russell Peter Norvig Artificial Intelligence A Modern Approach 2 Auflage 2002 Prentice Hall Thomas H Cormen Charles Leiserson Ronald L Rivest Clifford Stein Introduction to Algorithms MIT Press 2nd edition 2001 ISBN 0262531968 Abgerufen von https de wikipedia org w index php title Iterative Tiefensuche amp oldid 234603540