Unterschied zwischen Querkanten und Vorderkanten in einer DFT

11

In einem tiefen ersten Baum definieren die Kanten den Baum (dh die Kanten, die beim Durchlaufen verwendet wurden).

Es gibt einige übrig gebliebene Kanten, die einige der anderen Knoten verbinden. Was ist der Unterschied zwischen einer Querkante und einer Vorderkante?

Aus Wikipedia:

Basierend auf diesem Spanning Tree können die Kanten des ursprünglichen Diagramms in drei Klassen unterteilt werden: Vorwärtskanten, die von einem Knoten des Baums zu einem seiner Nachkommen zeigen, Hinterkanten, die von einem Knoten zu einem seiner Vorfahren zeigen, und Querkanten, die beides nicht tun. Manchmal werden Baumkanten, Kanten, die zum Spannbaum selbst gehören, getrennt von den Vorderkanten klassifiziert. Wenn das ursprüngliche Diagramm ungerichtet ist, sind alle Kanten Baumkanten oder Hinterkanten.

Stellt eine Kante, die nicht in der Durchquerung verwendet wird, die von einem Knoten auf einen anderen zeigt, keine Eltern-Kind-Beziehung her?

Soandos
quelle
Verwandte Themen : cs.stackexchange.com/questions/99988/… versucht, einen Algorithmus zu etablieren, der bei gerichteten Graphen bei der Tiefensuche lieber Vorwärtskanten als Kreuzkanten erstellt.
Pfalcon

Antworten:

22

Wikipedia hat die Antwort:

Geben Sie hier die Bildbeschreibung ein

In diesem Bild erscheinen alle Arten von Kanten. Verfolgen Sie die DFS in diesem Diagramm (die Knoten werden in numerischer Reihenfolge untersucht) und sehen Sie, wo Ihre Intuition fehlschlägt.


Dies erklärt das Diagramm: -

Vorwärtskante: (u, v), wobei v ein Nachkomme von u, aber keine Baumkante ist. Es ist eine Nichtbaumkante, die einen Scheitelpunkt mit einem Nachkommen in einem DFS-Baum verbindet.

Kreuzkante: jede andere Kante. Kann zwischen Scheitelpunkten in demselben Tiefenbaum oder in verschiedenen Tiefenbäumen wechseln. (Laie)
Es ist eine beliebige andere Kante in Grafik G. Sie verbindet Scheitelpunkte in zwei verschiedenen DFS-Bäumen oder zwei Scheitelpunkte in demselben DFS-Baum, von denen keiner der Vorfahr des anderen ist. (formal)

Yuval Filmus
quelle
Warum ist es nicht unmöglich, dass 6 zuerst durchquert wurden (rechte Seite zuerst)? Wenn das passiert wäre, wie wäre die 2-> 3-Kante genannt worden?
Soandos
@soandos, ich schlage vor, Sie nehmen sich die Zeit, um den Algorithmus zu verfolgen. Unter der Annahme, dass die Wikipedianer keinen Fehler gemacht haben, beschreibt das Bild einen echten DFS-Lauf in diesem Diagramm. Daher gibt es eine Möglichkeit, den Algorithmus in diese Ablaufverfolgung einzupassen. Die Arten von Kanten sind in Wikipedia klar genug beschrieben, und Sie können auch dieses Beispiel konsultieren.
Yuval Filmus
Ich verstehe, dass dies eine gültige Methode für eine DFS ist. Ich frage nur, was passiert, wenn es anders gemacht wurde.
Soandos
Dann wären die Ergebnisse anders. Es tut mir leid, Sie müssten es selbst herausfinden.
Yuval Filmus
2
@soandos Im Allgemeinen kann es sehr gut mehrere DFS-Durchquerungen geben. Die hier verwendeten Begriffe beziehen sich auf eine bestimmte Durchquerung und unterscheiden sich für mehrere Durchquerungen.
Raphael
9

Eine DFS-Durchquerung in einem ungerichteten Diagramm hinterlässt keine Querkante, da alle Kanten, die auf einen Scheitelpunkt fallen, untersucht werden.

In einem gerichteten Diagramm können Sie jedoch auf eine Kante stoßen, die zu einem zuvor entdeckten Scheitelpunkt führt, sodass dieser Scheitelpunkt kein Vorfahr oder Nachkomme des aktuellen Scheitelpunkts ist. Eine solche Kante wird als Kreuzkante bezeichnet.

Apoorv Gupta
quelle
Aporov, Danke für die Antwort. Es scheint mir immer noch, dass, wenn Sie in der DFS zu Scheitelpunkt 6 gelangen, wie in Wikipedia dargestellt, Sie drei Kanten von 6 durchqueren müssen. Zu diesem Zeitpunkt ist Scheitelpunkt 6 "aktuell". Schließlich werden Sie die Kante zum Scheitelpunkt 3 durchlaufen. Während 3 bereits besucht wurde, ist 3, da es eine Kante von 6 bis 3 gibt, 3 ein Nachkomme des "aktuellen" Scheitelpunkts 6. Wenn dies der Fall ist, wird dies verletzt die Definition einer Querkante. Die Definition muss etwas mehr enthalten, das nicht sehr explizit gemacht wird.
Tatsächlich enthält DFS nur Baumkanten für Hinterkanten (Einführung in Algorithmen Thm. 22.10).
jrhee17
2

Bei einer DFS-Durchquerung werden Knoten beendet, sobald alle ihre untergeordneten Knoten fertig sind. Wenn Sie die Erkennungs- und Endzeiten für jeden Knoten während des Durchlaufs markieren, können Sie überprüfen, ob ein Knoten ein Nachkomme ist, indem Sie die Start- und Endzeiten vergleichen. Tatsächlich partitioniert jede DFS-Durchquerung ihre Kanten gemäß der folgenden Regel.

Sei d [Knoten] die Entdeckungszeit des Knotens, sei auch f [Knoten] die Endzeit.

Satz in Klammern Für alle u, v gilt genau eine der folgenden Aussagen:
1. d [u] <f [u] <d [v] <f [v] oder d [v] <f [v] <d [u ] <f [u] und keiner von u und v ist ein Nachkomme des anderen.

  1. d [u] <d [v] <f [v] <f [u] und v ist ein Nachkomme von u.

  2. d [v] <d [u] <f [u] <f [v] und u ist ein Nachkomme von v.

Also kann d [u] <d [v] <f [u] <f [v] nicht passieren.
Wie Klammern: () [], ([]) und [()] sind OK, aber ([)] und [(]) sind nicht OK.

Betrachten Sie beispielsweise das Diagramm mit Kanten:
A -> B
A -> C
B -> C.

Die Reihenfolge des Besuchs soll durch eine Zeichenfolge der Knotenbezeichnungen dargestellt werden, wobei "ABCCBA" A -> B -> C (fertig) B (fertig) A (fertig) bedeutet, ähnlich wie ((())).

"ACCBBA" könnte also ein Modell für "(() ())" sein.

Beispiele:
"CCABBA": Dann ist A -> C eine Querkante, da der CC nicht innerhalb von A liegt.
"ABCCBA": Dann ist A -> C eine Vorwärtskante (indirekter Nachkomme).
"ACCBBA": Dann ist A -> C eine Baumkante (direkter Nachkomme).

Quellen:
CLRS:
https://mitpress.mit.edu/books/introduction-algorithms
Lecure Notes http://www.personal.kent.edu/~rmuhamma/Algorithms/MyAlgorithms/GraphAlgor/depthSearch.htm

Chris Hafley
quelle