Nachweis der Richtigkeit:Algorithmus für den Durchmesser eines Baumes in der Graphentheorie
-
20-12-2019 - |
Frage
Um den Durchmesser eines Baums zu ermitteln, kann ich einen beliebigen Knoten aus dem Baum nehmen, BFS durchführen, um einen Knoten zu finden, der am weitesten von ihm entfernt ist, und dann BFS für diesen Knoten ausführen.Der größte Abstand vom zweiten BFS ergibt den Durchmesser.
Ich bin mir allerdings nicht sicher, wie ich das beweisen soll?Ich habe versucht, Induktion über die Anzahl der Knoten anzuwenden, aber es gibt zu viele Fälle.
Für alle Ideen wäre ich sehr dankbar ...
Lösung
Lassen Sie uns den von der ersten BFS X gefundenen Endpunkt aufrufen. Der entscheidende Schritt beweist, dass das in diesem ersten Schritt gefundene X immer "arbeitet" - das heißt, dass es immer an einem Ende eines längsten Weges ist. (Beachten Sie, dass es im Allgemeinen mehr als einen gleich längsten Pfad geben kann.) Wenn wir dies etablieren können, ist es unkompliziert, zu sehen, dass ein von X verwurzelter BFS einen Knoten, der von x möglich ist, ein Knoten findet, der daher ein Gesamtzahl ist längster Pfad.
Beobachten Sie, dass auf dem einzigartigen Pfad zwischen U und V ein bisschen am höchsten sein muss (am nächsten zum Wurzel) Scheitelpunkt h. Es gibt zwei Möglichkeiten: entweder h steht auf dem Pfad von der Wurzel der BFS bis X oder nicht. Zeigen Sie einen Widerspruch, indem Sie zeigen, dass der U-V-Pfad in beiden Fällen mindestens so lang gemacht werden kann, indem er ein paar Pfadsegment darin mit einem Pfad zu X ersetzt.
[edit] eigentlich ist es möglicherweise nicht notwendig, die 2 Fälle doch separat zu behandeln. Aber ich finde es oft einfacher, eine Konfiguration in mehrere (oder sogar viele) Fälle zu brechen und jeden separat zu behandeln. Hier ist der Fall, in dem H auf dem Pfad von der BFS-Wurzel bis X auf dem Pfad ist, leichter zu handhaben, und gibt einen Hinweis für den anderen Fall.
[edit 2] zum späteren zurückkommt, scheint mir jetzt, dass die beiden Fälle, die berücksichtigt werden müssen, dass (i) der UV-Pfad den Pfad von der Wurzel auf X schneidet ( bei einigen vertex y, nicht unbedingt an dem höchsten Punkt der UV-Bahn H); und (ii) es nicht. Wir brauchen immer noch H, um jeden Fall zu beweisen.
Andere Tipps
Ich werde trainieren j_random_hackers Hinweis.Lassen s, t
ein maximal entferntes Paar sein.Lassen u
sei der beliebige Scheitelpunkt.Wir haben einen Schaltplan wie
u
|
|
|
x
/ \
/ \
/ \
s t ,
Wo x
ist die Kreuzung von s, t, u
(d. h.der eindeutige Scheitelpunkt, der auf jedem der drei Pfade zwischen diesen Scheitelpunkten liegt).
Nehme an, dass v
ist ein Scheitelpunkt, der maximal entfernt ist u
.Wenn der Schaltplan jetzt so aussieht
u
|
|
|
x v
/ \ /
/ *
/ \
s t ,
Dann
d(s, t) = d(s, x) + d(x, t) <= d(s, x) + d(x, v) = d(s, v),
wo die Ungleichung gilt, weil d(u, t) = d(u, x) + d(x, t)
Und d(u, v) = d(u, x) + d(x, v)
.Es gibt einen symmetrischen Fall, in dem v
hängt dazwischen s
Und x
statt dazwischen x
Und t
.
Der andere Fall sieht so aus
u
|
*---v
|
x
/ \
/ \
/ \
s t .
Jetzt,
d(u, s) <= d(u, v) <= d(u, x) + d(x, v)
d(u, t) <= d(u, v) <= d(u, x) + d(x, v)
d(s, t) = d(s, x) + d(x, t)
= d(u, s) + d(u, t) - 2 d(u, x)
<= 2 d(x, v)
2 d(s, t) <= d(s, t) + 2 d(x, v)
= d(s, x) + d(x, v) + d(v, x) + d(x, t)
= d(v, s) + d(v, t),
Also max(d(v, s), d(v, t)) >= d(s, t)
durch ein Durchschnittsargument, und v
gehört zu einem maximal entfernten Paar.
Hier ist eine alternative Möglichkeit, es anzusehen:
vermuten
Betrachten Sie den folgenden Algorithmus:
- .
- lass count = 0. Lassen Sie alle Kanten in e zunächst färbelt. Lassen Sie
c zunächst gleich v sein.
- Betrachten Sie die Subset v 'von v , die alle Scheitelpunkte mit genau einem unbefristelten Rand enthält:
- Wenn v 'leer ist, dann lassen Sie d = count * 2 und stoppt. .
- Wenn
v 'genau zwei Elemente enthält, dann färben Sie ihre gegenseitige (färbte) Kantegrün, lassen Sie d = count * 2 + 1 und stoppt. - Ansonsten,
v enthält mindestens drei Scheitelpunkte; Gehen Sie wie folgt vor: - inkrementieren count um eins.
- Entfernen Sie alle Scheitelpunkte von c , die keine farblosen Kanten haben.
- Für jeden Scheitelpunkt in v mit zwei oder mehr farblosen Kanten, wieder färben Sie jedes seiner grünen Kanten rot (einige Scheitelpunkte können keine solchen Kanten aufweisen).
- für jeden Scheitelpunkt in v ', färben Sie seine farbige Randgrün.
- Rückkehr zu Schritt (2).
- Dieser Algorithmus endet immer unter den gegebenen Bedingungen, wobei jede Kante von g entweder rot oder grün gefärbt ist und
c verließ mit einem oder zwei Elementen. - Bei Algorithmus-Terminierung ist d der Durchmesser von g , gemessen in Kanten.
- gegeben einen Scheitelpunkt v in v , die einfachen maximal langen einfachen pfade in g < / Stark> Beginnen Sie bei v sind genau diejenigen, die alle Scheitelpunkte der Mitte enthalten, an einem Blatt enden und nur grüne Kanten zwischen der Mitte und dem fernen Endpunkt durchqueren. Diese gehen von v , über die Mitte, an einem der Blätter, die am weitesten vom Zentrum entfernt sind.
das grundsätzlich den Graphen aus den Blättern nach innen färbt, Markierungspfade mit maximaler Entfernung zu einem Blatt in grün und markieren diese mit nur kürzeren Abständen in Rot. Inzwischen sind die Knoten von c , der Mitte, mit kürzeren maximalen Abstand zu einem Blatt weg, bis
Durch die Konstruktion sind alle einfachen Wege von Blattscheitelpunkten zu ihrem nächstgelegenen Mitte-Scheitelpunkt, der nur grüne Kanten durchqueren, die gleiche Länge ( count ) und alle anderen einfachen Wege von einem Blattscheitelpunkt in sein nächstgelegenes Zentrum Scheitelpunkt (durchqueren mindestens eine rote Kante) sind kürzer. Es kann außerdem bewiesen werden, dass
Betrachten Sie nun Ihren Algorithmus, der in Anbetracht der oben genannten praktischer ist. Ausgehend von jedem Scheitelpunkt v gibt es genau einen einfachen Pfad
Der Schlüsselpunkt für unsere Zwecke ist, dass der ankommende Rand des anderen Endpunkts notwendigerweise grün ist. Wenn wir also eine Suche nach den längsten von dort beginnenden Wegen durchführen, haben wir Zugang zu denjenigen, die nur grüne Kanten von Blatt über (alle Scheitelpunkte von) des Zentrums zu einem anderen Blatt durchqueren. Das sind genau die maximalen einfachen Pfade in g , so dass wir zuversichtlich sein können, dass die zweite Suche tatsächlich den Diagrammdurchmesser enthüllen wird.
1:procedureTreeDiameter(T)
2:pick an arbitrary vertex v where v∈V
3:u = BFS ( T, v )
4:t = BFS ( T, u )
5:return distance ( u, t )
Result: Complexity = O(|V|)