Dieser Link bietet einen Algorithmus zum Ermitteln des Durchmessers eines ungerichteten Baums mithilfe von BFS / DFS . Zusammenfassend:
Führen Sie BFS auf einem beliebigen Knoten im Diagramm aus, und merken Sie sich dabei den Knoten, den Sie zuletzt entdeckt haben. Führen Sie BFS von u aus und merken Sie sich den Knoten v, der zuletzt erkannt wurde. d (u, v) ist der Durchmesser des Baumes.
Warum funktioniert es?
Seite 2 von diesem stellt eine Argumentation, aber es ist verwirrend. Ich zitiere den ersten Teil des Beweises:
Führen Sie BFS auf einem beliebigen Knoten im Diagramm aus, und merken Sie sich dabei den Knoten, den Sie zuletzt entdeckt haben. Führen Sie BFS von u aus und merken Sie sich den Knoten v, der zuletzt erkannt wurde. d (u, v) ist der Durchmesser des Baumes.
Richtigkeit: Sei a und b zwei beliebige Knoten, so dass d (a, b) der Durchmesser des Baumes ist. Es gibt einen eindeutigen Pfad von a nach b. Seien Sie nicht der erste Knoten auf diesem Pfad, der von BFS erkannt wird. Wenn sich die Pfade von s nach u und von a nach b keine Kanten teilen, enthält der Pfad von t nach u s. So
.... (weitere Ungleichungen folgen ..)
Die Ungleichungen ergeben für mich keinen Sinn.
Antworten:
Alle Teile des Nachweises der Behauptung hängen von 2 entscheidenden Eigenschaften von Bäumen mit ungerichteten Kanten ab:
Wählen Sie einen beliebigen Baumknoten . Angenommen, sind Knoten mit . Es sei ferner angenommen, dass der Algorithmus einen Knoten findet, der zuerst bei beginnt , und einen Knoten nächstes bei beginnt . wlog . Beachten Sie, dass muss, es sei denn, die erste Stufe des Algorithmus würde nicht bei enden . Wir werden sehen, dass .u , v ∈ V ( G )s u,v∈V(G) x s y x d ( s , u ) ≥ d ( s , v ) d ( s , x ) ≥ d ( s , y ) x d ( x , y ) =d(u,v)=diam(G) x s y x d(s,u)≥d(s,v) d(s,x)≥d(s,y) x d(x,y)=d(u,v)
Die allgemeinste Konfiguration aller beteiligten Knoten ist in den folgenden Pseudo-Grafiken zu sehen (möglicherweise oder oder beides): s = z x ys=zuv s=zxy
Wir wissen das:
1) und 2) implizieren .d(u,v)=d(zuv,v)+d(zuv,u)≥d(zuv,x)+d(zuv,y)=d(x,y)+2d(zuv,zxy)≥d(x,y)
3) und 4) implizieren Äquivalent bis .d(zxy,y)+d(s,zxy)+d(zxy,x)≥d(s,zuv)+d(zuv,u)+d(v,zuv)+d(zuv,zxy) d(x,y)=d(zxy,y)+d(zxy,x)≥2∗d(s,zuv)+d(v,zuv)+d(u,zuv)≥d(u,v)
daher ist .d(u,v)=d(x,y)
Analoge Beweise gelten für die alternativen Konfigurationen
und
Dies sind alles mögliche Konfigurationen. insbesondere aufgrund des Ergebnisses von Stufe 1 des Algorithmus und aufgrund von Stufe 2.y ∉ p a t h ( x , u ) , y ∉ p a t h ( x , v )x∉path(s,u),x∉path(s,v) y∉path(x,u),y∉path(x,v)
quelle
Die Intuition dahinter ist sehr leicht zu verstehen. Angenommen, ich muss den längsten Pfad finden, der zwischen zwei beliebigen Knoten im angegebenen Baum existiert.
Nach dem Zeichnen einiger Diagramme können wir beobachten, dass der längste Pfad immer zwischen zwei Blattknoten auftritt (Knoten, bei denen nur eine Kante verknüpft ist). Dies kann auch durch den Widerspruch bewiesen werden, dass, wenn der längste Pfad zwischen zwei Knoten liegt und einer oder beide Knoten kein Blattknoten sind, wir den Pfad erweitern können, um einen längeren Pfad zu erhalten.
Eine Möglichkeit besteht darin, zuerst zu überprüfen, welche Knoten Blattknoten sind, und dann BFS von einem der Blattknoten aus zu starten, um den am weitesten von diesem entfernten Knoten zu ermitteln.
Anstatt zuerst herauszufinden, welche Knoten Blattknoten sind, starten wir BFS von einem zufälligen Knoten und sehen dann, welcher Knoten am weitesten davon entfernt ist. Der am weitesten entfernte Knoten sei x. Es ist klar, dass x ein Blattknoten ist. Wenn wir nun BFS mit x starten und den am weitesten entfernten Knoten überprüfen, erhalten wir unsere Antwort.
Aber was ist die Garantie, dass x ein Endpunkt eines maximalen Pfades sein wird?
Schauen wir uns ein Beispiel an:
Angenommen, ich habe mein BFS bei 6 gestartet. Der Knoten mit der maximalen Entfernung von 6 ist Knoten 7. Mit BFS können wir diesen Knoten abrufen. Jetzt starten wir BFS von Knoten 7, um Knoten 9 auf maximale Entfernung zu bringen. Der Pfad von Knoten 7 zu Knoten 9 ist eindeutig der längste Pfad.
Was wäre, wenn BFS, das von Knoten 6 aus gestartet wurde, bei maximaler Entfernung 2 als Knoten ergibt? Wenn wir dann BFS von 2 erhalten, erhalten wir 7 als Knoten bei maximaler Entfernung und der längste Pfad ist dann 2-> 1-> 4-> 5-> 7 mit der Länge 4. Die tatsächlich längste Pfadlänge ist jedoch 5. Dies ist nicht möglich passieren, weil BFS von Knoten 6 niemals Knoten 2 als Knoten mit maximaler Entfernung ergibt.
Hoffentlich hilft das.
quelle
Hier ist ein Beweis, der dem in der ursprünglichen Frage verknüpften MIT-Lösungssatz genauer folgt. Der Klarheit halber werde ich die gleiche Notation verwenden, die sie verwenden, damit der Vergleich einfacher durchgeführt werden kann.
Angenommen, wir haben zwei Eckpunkte und so dass der Abstand zwischen und auf dem Pfad ein Durchmesser ist, z. B. ist der Abstand maximal mögliche Abstand zwischen zwei beliebigen Punkten im Baum. Angenommen, wir haben auch einen Knoten (wenn , dann wäre es offensichtlich, dass das Schema funktioniert, da das erste BFS würde und das zweite zu a zurückkehren würde). Nehmen wir an , dass wir einen Knoten haben derart , dass .b a b pa b a b p(a,b) d(a,b) s≠a,b s=a b u d(s,u)=maxxd(s,x)
Lemma 0: Sowohl als auch sind Blattknoten.a b
Beweis: Wenn sie keine Blattknoten wären, könnten wir vergrößern indem wir die Endpunkte auf Blattknoten erweitern, was im Gegensatz dazu steht, dass ein Durchmesser ist.d(a,b) d(a,b)
Lemma 1: .max[d(s,a),d(s,b)]=d(s,u)
Beweis: Nehmen wir zum Zwecke des Widerspruchs an, dass sowohl als auch streng kleiner als . Wir betrachten zwei Fälle:d(s,a) d(s,b) d(s,u)
Fall 1: Pfad enthält keinen Scheitelpunkt . In diesem Fall kann nicht der Durchmesser sein. Um zu sehen, warum, sei der eindeutige Eckpunkt auf mit dem kleinsten Abstand zu . Dann sehen wir, dass , da . In ähnlicher Weise hätten wir auch . Dies widerspricht, dass ein Durchmesser ist.s d ( a , b ) , t p ) + d ( t , b ) , d ( s , u ) > d ( s , bp(a,b) s d(a,b) t p(a,b) s d(a,u)=d(a,t)+d(t,s)+d(s,u)>d(a,b)=d(a,t)+d(t,b) d(s,u)>d(s,b)=d(s,t)+d(t,b)>d(t,b) d(b,u)>d(a,b) d(a,b)
Fall 2: Pfad enthält Vertex . In diesem Fall kann wieder nicht der Durchmesser sein, da für einen Scheitelpunkt so dass , sowohl als auch wäre größer als .s d ( a , b )p(a,b) s d(a,b) u d(s,u)=maxxd(s,x) d(a,u) d(b,u) d(a,b)
Lemma 1 gibt den Grund an, warum wir die zweite Breitensuche am zuletzt entdeckten Scheitelpunkt des ersten BFS starten . Wenn der eindeutige Scheitelpunkt mit der größtmöglichen Entfernung von , muss es nach Lemma 1 einer der Endpunkte eines Pfades mit einer Entfernung sein, die dem Durchmesser entspricht, und daher findet ein zweites BFS mit als Wurzel das Durchmesser. Wenn es andererseits mindestens einen anderen Eckpunkt so dass , dann wissen wir, dass der Durchmesser , und es ist egal, ob wir das zweite BFS bei oder starten .u s u v d ( s , v ) = d ( s , u ) d ( a , b ) = 2 d ( s , u ) u vu u s u v d(s,v)=d(s,u) d(a,b)=2d(s,u) u v
quelle
Führen Sie zuerst ein DFS von einem zufälligen Knoten aus. Dann ist der Durchmesser eines Baums der Pfad zwischen den tiefsten Blättern eines Knotens in seiner DFS-Unterstruktur:
quelle
Nach der Definition von BFS ist die Entfernung (vom Startknoten) jedes erkannten Knotens entweder gleich der Entfernung des vorherigen erkannten Knotens oder um 1 größer. Somit gehört der letzte von BFS erkannte Knoten zu den am weitesten vom Start entfernten Knoten.
Somit Wählen der Algorithmus der Verwendung BFS zweimal beträgt“einen beliebigen Knoten . Finden der Knoten am weitesten von (letzten Knoten durch BFS gefunden von Ausgang ). Findet die Knoten am weitesten von (letzten Knoten gefunden BFS ausgehend von ). ", der somit zwei Knoten maximaler Entfernung voneinander findet.a x xx a x x b a a
quelle
Eine wichtige Erkenntnis ist, dass ein Baum immer planar ist, was bedeutet, dass er in einer Ebene angeordnet werden kann, so dass gewöhnliches zweidimensionales Denken oft funktioniert. In diesem Fall sagt der Algorithmus, dass Sie überall starten und so weit wie möglich davon entfernt sein sollen. Die Entfernung von diesem Punkt bis zu dem Punkt, an dem Sie sich befinden, ist die längste Entfernung im Baum und daher der Durchmesser.
Diese Methode würde auch funktionieren, um den Durchmesser einer realen, physischen Insel zu bestimmen, wenn wir diesen als den Durchmesser des kleinsten Kreises definieren würden, der die Insel vollständig einschließen würde.
quelle
@op, die Art und Weise, wie die Fälle in der PDF definiert sind, ist möglicherweise ein bisschen anders.
Ich denke, dass die beiden Fälle sein sollten:
Der Rest des Proofs im PDF sollte folgen.
Mit dieser Definition fällt die von OP gezeigte Zahl in Fall 2.
quelle