Tiefensuche: Unterschied zwischen den Versionen
Sn (Diskussion | Beiträge) (Breitensuche geladen) |
Sn (Diskussion | Beiträge) K (Link hinzugefügt) |
||
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{Thumbnailbox|INHALT={{Beispielgraph}}|CAPTION=Ein Beispielgraph}} | {{Thumbnailbox|INHALT={{Beispielgraph}}|CAPTION=Ein Beispielgraph}} | ||
Die [[ | Die [[Tiefensuche]] ist ein [[Algorithmus]], um ein Element in einem [[Graph]]en zu suchen, ohne irgendwelche Informationen über dessen Verbindungen zu anderen Knoten zu haben. | ||
Der Algorithmus beginnt bei einem Startknoten, besucht zunächst | Der Algorithmus beginnt bei einem Startknoten, besucht zunächst einen seiner noch nicht besuchten Nachbarn, dann einen von dessen noch nicht besuchten Nachbarn, dann einen von ''dessen'' noch nicht besuchten Nachbarn usw., bis er an einen Knoten gerät, dessen Nachbarn alle schon besucht worden sind. Falls dies geschieht, wird die Kette von besuchten Knoten rückwärts abgearbeitet, bis ein Knoten mit noch unbesuchten Nachbarn gefunden wird. Über diesen wird wieder eine Tiefensuche durchgeführt, bis der ganze Graph abgearbeitet ist. | ||
Die Liste der noch zu besuchenden Knoten kann bei der Breitensuche als [[ | Die Liste der noch zu besuchenden Knoten kann bei der Breitensuche als [[Stack]] modelliert werden. | ||
Die betrachteten Knoten und Kanten bilden nach dem Ende einer Tiefensuche einen [[Baum (Datenstruktur)|Spannbaum]] mit dem Startknoten als Wurzel, allerdings nicht zwingend einen minimalen. | |||
Die betrachteten Knoten und Kanten | |||
== Beispiel == | == Beispiel == | ||
Zeile 17: | Zeile 15: | ||
|INHALT= | |INHALT= | ||
{{Thumbnailbox| | {{Thumbnailbox| | ||
INHALT={{Beispielgraph|link=lightgray|A=#00B169|AB= | INHALT={{Beispielgraph|link=lightgray|A=#00B169|AB=lightgreen|AC=lightgreen}} | ||
|CAPTION= | |CAPTION=Stack mit den noch nicht besuchten bekannten Nachbarn: B, C. | ||
|ALIGN=left | |ALIGN=left | ||
|CLASS=noclear}} | |CLASS=noclear}} | ||
{{Thumbnailbox| | {{Thumbnailbox| | ||
INHALT={{Beispielgraph|link=lightgray|A=#00B169|AB=#00B169|AC= | INHALT={{Beispielgraph|link=lightgray|A=#00B169|AB=#00B169|AC=lightgreen|B=#00B169|BC=lightgreen|BD=lightgreen|BE=lightgreen}} | ||
|CAPTION= | |CAPTION=Stack mit den noch nicht besuchten bekannten Nachbarn: C, D, E, C. | ||
|ALIGN=left | |ALIGN=left | ||
|CLASS=noclear}} | |CLASS=noclear}} | ||
{{Thumbnailbox| | {{Thumbnailbox| | ||
INHALT={{Beispielgraph|link=lightgray|A=#00B169|AB=#00B169|AC=#00B169| | INHALT={{Beispielgraph|link=lightgray|A=#00B169|AB=#00B169|AC=lightgreen|B=#00B169|BC=#00B169|BD=lightgreen|BE=lightgreen|C=#00B169|CD=lightgreen}} | ||
|CAPTION= | |CAPTION=Stack mit den noch nicht besuchten bekannten Nachbarn: D, D, E, C. | ||
|ALIGN=left | |ALIGN=left | ||
|CLASS=noclear}} | |CLASS=noclear}} | ||
{{Thumbnailbox| | {{Thumbnailbox| | ||
INHALT={{Beispielgraph|link=lightgray|A=#00B169|AB=#00B169|AC=#00B169| | INHALT={{Beispielgraph|link=lightgray|A=#00B169|AB=#00B169|AC=lightgreen|B=#00B169|BC=#00B169|BD=lightgreen|BE=lightgreen|C=#00B169|CD=#00B169|D=#00B169|DE=lightgreen}} | ||
|CAPTION= | |CAPTION=Stack mit den noch nicht besuchten bekannten Nachbarn: E, D, E, C. | ||
|ALIGN=left | |ALIGN=left | ||
|CLASS=noclear}} | |CLASS=noclear}} | ||
{{Thumbnailbox| | {{Thumbnailbox| | ||
INHALT={{Beispielgraph|link=lightgray|A=#00B169|AB=#00B169|AC=#00B169| | INHALT={{Beispielgraph|link=lightgray|A=#00B169|AB=#00B169|AC=lightgreen|B=#00B169|BC=#00B169|BD=lightgreen|BE=lightgreen|C=#00B169|CD=#00B169|D=#00B169|DE=#00B169|E=#00B169}} | ||
|CAPTION=E wurde gefunden. | |CAPTION=E wurde gefunden. | ||
|ALIGN=left | |ALIGN=left | ||
Zeile 47: | Zeile 45: | ||
}} | }} | ||
== | == Weblinks == | ||
* {{VisuAlgo|en/dfsbfs|Tiefensuche visualisiert}} | |||
{{Navigationsleiste Graphalgorithmen}} | {{Navigationsleiste Graphalgorithmen}} | ||
[[Kategorie:Algorithmen]] | |||
[[Kategorie:Graphen]] |
Aktuelle Version vom 1. April 2024, 02:00 Uhr
Die Tiefensuche ist ein Algorithmus, um ein Element in einem Graphen zu suchen, ohne irgendwelche Informationen über dessen Verbindungen zu anderen Knoten zu haben.
Der Algorithmus beginnt bei einem Startknoten, besucht zunächst einen seiner noch nicht besuchten Nachbarn, dann einen von dessen noch nicht besuchten Nachbarn, dann einen von dessen noch nicht besuchten Nachbarn usw., bis er an einen Knoten gerät, dessen Nachbarn alle schon besucht worden sind. Falls dies geschieht, wird die Kette von besuchten Knoten rückwärts abgearbeitet, bis ein Knoten mit noch unbesuchten Nachbarn gefunden wird. Über diesen wird wieder eine Tiefensuche durchgeführt, bis der ganze Graph abgearbeitet ist.
Die Liste der noch zu besuchenden Knoten kann bei der Breitensuche als Stack modelliert werden.
Die betrachteten Knoten und Kanten bilden nach dem Ende einer Tiefensuche einen Spannbaum mit dem Startknoten als Wurzel, allerdings nicht zwingend einen minimalen.
Beispiel
Das Objekt E soll vom Startknoten aus gefunden werden.