Wie finde ich ein lokales Minimum eines vollständigen Binärbaums?
Betrachten Sie einen vollständigen Binärbaum Knoten , wobei für einige . Jeder Knoten ist mit einer reellen Zahl . Sie können davon ausgehen, dass die reellen Zahlen, die die Knoten kennzeichnen, alle unterschiedlich sind. Ein Knoten ist ein lokales Minimum, wenn die Bezeichnung für alle Knoten , die durch eine Kante mit sind, kleiner als die Bezeichnung .
Sie sind jeweils eine vollständige binäre Baum gegeben , aber die Kennzeichnung nur in dem folgenden angegeben wird implizit Art und Weise: für jeden Knoten , können Sie den Wert bestimmen durch Sondieren des Knotens . Zeigen Sie, wie Sie ein lokales Minimum von indem Sie nur -Sonden für die Knoten von .
Namensnennung: Dies scheint Problem 6 in Kapitel 5 "Teilen und Erobern" aus dem Buch "Algorithm Design" von Jon Kleinberg und Eva Tardos zu sein.
quelle
O(log n)
. Ist es das, wonach du suchst? Hier ist ein Hinweis: Nennen Sie einen Knoten ein "lokales Kandidatenminimum", wenn er kleiner als sein übergeordnetes Element ist. Nun zu jedem lokalen Minimum eines Kandidaten: Entweder ist es ein lokales Minimum oder es hat ein Kind, das ein lokales Minimum eines Kandidaten ist.Antworten:
Da der Baum endlich ist und die Beschriftungen reelle Zahlen sind, können wir sicher sein, dass die Menge der Beschriftungen ein kleinstes Element enthält ( diese Frage von math.SE hat einen Beweis für diese einfache Eigenschaft). In diesem Fall ist es in Ordnung, dass die lokalen Minima streng kleiner sein müssen als ihre Nachbarn, da alle Bezeichnungen unterschiedlich sind. Wenn dies der Fall wäre, müssten wir diesen Zustand auf "weniger oder gleich" lockern, da es sonst möglicherweise keine Lösung gibt. Wir wissen jedoch, dass mindestens ein lokales Minimum zu finden ist.
Wenn der Baum verwurzelt ist (dh wir haben eine Vorstellung von einer Eltern-Kind-Beziehung), können wir das Problem geringfügig billiger lösen. Wenn der Baum nicht verwurzelt ist, können wir dies auch asymptotisch tun, aber wir werden wahrscheinlich tatsächlichere Sonden durchführen.
Zuerst werden wir uns mit dem verwurzelten Fall befassen.
Da der Baum ein (vollständiger) Binärbaum ist, hat jeder Scheitelpunkt höchstens drei Nachbarn, seinen Elternteil und zwei Geschwister (wobei die Wurzel natürlich keinen Elternteil hat). Ein Scheitelpunkt ist also ein lokales Minimum, wenn seine Beschriftung kleiner als die Beschriftungen ist von seinen zwei Kindern und Eltern. Daher können wir mit höchstens vier Sonden bestimmen, ob ein Scheitelpunkt ein lokales Minimum ist oder nicht (da wir den Baum in geordneter Weise durchlaufen, benötigen wir im verwurzelten Fall höchstens drei).
Um tatsächlich ein lokales Minimum zu finden, können wir den Baum beginnend mit der Wurzel als aktuellem Scheitelpunkt folgendermaßen durchlaufen:
Wenn wir von der Wurzel ausgehen, müssen wir uns nie um die Bezeichnung der Eltern kümmern - die Wurzel hat keine Eltern, und wenn unser aktueller Scheitelpunkt eine Eltern hat, müssen wir sie in der vorherigen Iteration abgezinst haben. Beachten Sie, dass es in Schritt 2 nicht unbedingt erforderlich ist, dass wir das kleinste Etikett auswählen. Jedes Etikett, das kleiner als der aktuelle ist, reicht aus. 1 Wenn Sie das kleinste auswählen, erhalten Sie nur eine bestimmte Auswahl (wiederum, weil wir unterschiedliche Etiketten haben).
Wenn wir einen Scheitelpunkt aus den beiden Kindern auswählen, wählt unsere Durchquerung einen Pfad von der Wurzel zu (am weitesten entfernt) einem Blatt aus, sodass wir einen binären Tiefenbaum habend< logn + 1 (da es ein kompletter Binärbaum mit ist n =2d- -1 Eckpunkte) führen wir höchstens durch 3 d∈ O ( logn ) Sonden.
Im Fall ohne Wurzeln haben wir keinen so bequemen Ausgangspunkt, aber wir haben immer noch die Baumstruktur (auch wenn der Algorithmus es nicht weiß). Wir können den folgenden Algorithmus verwenden:
Bei jeder Iteration führen wir höchstens 4 Sonden durch. Die Frage ist also, wie viele Iterationen es geben kann. Der Schlüssel ist zu beobachten, dass wir niemals zurückgehen können (wir wissen, dass wir von dort kamen, hatten ein größeres Etikett), also müssen wir einem einfachen Pfad im Diagramm folgen, aber da das Diagramm tatsächlich ein vollständiger Binärbaum ist, der längste einfache Pfad hat Länge2 d . So leisten wir auch im unbewurzelten Fall höchstens Leistung8 d∈ O ( logn ) Sonden.
Zur Richtigkeit betrachten wir den zweiten Algorithmus (der verwurzelte Fall ist eindeutig nur ein Sonderfall des nicht verwurzelten).
Die Tatsache, dass der Algorithmus niemals zurückverfolgen kann, garantiert auch die Beendigung, da der Graph endlich ist. Jetzt müssen wir nur noch den Scheitelpunkt demonstrierenv Wir beenden bei ist in der Tat ein lokales Minimum. Nehmen Sie für den Widerspruch an, dass es nicht ist, dann hat es einen Nachbarnu das hat eine Bezeichnung mit einem niedrigeren Wert. Wir haben drei Fälle: (1)u ist der vorherige Scheitelpunkt in dem Pfad, dem der Algorithmus gefolgt ist. In diesem Fall befand sich der Algorithmus auf u hätte es nicht ausgewählt v als nächster Scheitelpunkt; (2)u wird im Pfad angezeigt, jedoch mehr als eine Iteration früher. In diesem Fall ist der Graph kein Baum. und (3)u befindet sich nicht in dem Pfad, dem der Algorithmus gefolgt ist, aber dann würde der Algorithmus auswählen u als nächster Scheitelpunkt in Schritt 4, und der Algorithmus hätte nicht bei beendet v . Somitv muss ein lokales Minimum sein.
Eine andere Möglichkeit, dies zu sehen, besteht darin, einfach zu beobachten, dass die Reihenfolge der Beschriftungen der vom Algorithmus ausgewählten Scheitelpunkte monoton abnimmt. Daraus folgt sofort die Beendigung und Richtigkeit.
Fußnote:
quelle