Wie finde ich ein lokales Minimum eines vollständigen Binärbaums?


7

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 .nT.n=2d- -1dvV.(T.)xvvV.(T.)xvxwwv

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 .T.vxvvT.Ö(Logn) T.

Namensnennung: Dies scheint Problem 6 in Kapitel 5 "Teilen und Erobern" aus dem Buch "Algorithm Design" von Jon Kleinberg und Eva Tardos zu sein.


3
Sie sprechen von "dem" lokalen Minimum, aber es könnte mehrere geben.
Yuval Filmus

2
Es gibt einen Algorithmus, der eines der lokalen Minima in einem vollständigen Binärbaum rechtzeitig findet 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.
Rici

Ich sehe eine Notiz, die besagt, dass der Text aus einer Übung kopiert wurde. Das Kopieren eines Problems aus einem Lehrbuch ohne Namensnennung ist auf dieser Site nicht gestattet. (Das Kopieren selbst mit Zuschreibung ist meiner Meinung nach eine eher schlechte Form, aber das Kopieren ohne Zuschreibung stellt ein Plagiat dar, was hier nicht erwünscht ist.) Lassen Sie die Zuschreibung bitte intakt.
DW

Antworten:


5

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:

  1. Prüfen Sie die Beschriftung des aktuellen Scheitelpunkts und die Beschriftungen seiner beiden untergeordneten Elemente.
  2. Wenn die aktuelle Bezeichnung die kleinste ist, halten Sie an und melden Sie, dass der aktuelle Scheitelpunkt ein lokales Minimum ist.
  3. Andernfalls setzen Sie den aktuellen Scheitelpunkt auf das untergeordnete Element mit der kleinsten Beschriftung und kehren Sie zu Schritt 1 zurück.

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 haben d<Logn+1 (da es ein kompletter Binärbaum mit ist n=2d- -1 Eckpunkte) führen wir höchstens durch 3dÖ(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:

  1. Wählen Sie einen beliebigen Scheitelpunkt als anfänglichen aktuellen Scheitelpunkt.
  2. Prüfen Sie die Beschriftung des aktuellen Scheitelpunkts und aller seiner Nachbarn.
  3. Wenn der aktuelle Scheitelpunkt die niedrigste Bezeichnung hat, halten Sie an und melden Sie ihn als lokales Minimum.
  4. Wählen Sie andernfalls den Nachbarn mit der niedrigsten Bezeichnung als neuen aktuellen Scheitelpunkt aus und kehren Sie zu Schritt 2 zurück.

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änge2d. So leisten wir auch im unbewurzelten Fall höchstens Leistung8dÖ(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 demonstrierenvWir beenden bei ist in der Tat ein lokales Minimum. Nehmen Sie für den Widerspruch an, dass es nicht ist, dann hat es einen Nachbarnudas 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 uhätte es nicht ausgewählt vals nächster Scheitelpunkt; (2)uwird 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:

  1. Die Eigenschaft, die dies ermöglicht, ist, dass jeder Teilbaum ein lokales Minimum hat - wiederum hat jede endliche Menge, die eine Gesamtreihenfolge hat, ein kleinstes Element. Wenn wir also den Teilbaum durch Induktion um eine neue Wurzel und einen Geschwister-Teilbaum erweitern, haben wir drei Fälle: (1) Die neue Wurzel ist kleiner als ihre beiden Kinder, sodass der Algorithmus die neue Wurzel beenden würde; (2) die neue Wurzel ist kleiner als ein Kind, aber nicht das andere, dann wählt der Algorithmus nicht die größere Wurzel und muss per Definition die kleinste nehmen; oder (3) beide Kinder sind kleiner, aber in diesem Fall hat, wie erwähnt, jeder Teilbaum mindestens ein lokales Minimum, so dass wir entweder auswählen können.

Ein Korrektheitsnachweis Ihres Algorithmus ist wünschenswert: Warum können wir den anderen Teilbaum sicher wegwerfen und nur das Kind mit der kleinsten Bezeichnung auswählen? IMO muss nachgewiesen werden, dass Ihr Algorithmus ein lokales Minimum findet, solange es existiert. Darüber hinaus kann eine stärkere Eigenschaft zutreffen: Jeder vollständige Binärbaum hat mindestens ein lokales Minimum.
Hengxin

@hengxin (hoffentlich) geklärt.
Luke Mathieson

Ich denke, es gibt einen Fehler in dieser Argumentation, da O (log n) -Sonden eine gewisse Reihenfolge beim Einfügen der Baumwerte erfordern, so dass das Teilen und Erobern zwischen dem Gehen nach links und nach rechts unterscheiden kann. In diesem Fall wählt "Schritt den Nachbarn mit der niedrigsten Bezeichnung auswählen" in Schritt 4 nicht immer den richtigen Pfad, da die Baumwerte nicht geordnet sind (die lokalen Minima können sich ganz rechts im Teilbaum befinden). Wenn beim Einfügen des Baums eine Reihenfolge vorliegt, ist der übergeordnete Knoten immer größer als der aktuelle Knoten, sodass die lokalen Minima nur auf dem linken Blatt des Baums vorhanden sind.
Juan Zamora

Cormen et al. (2011) definieren, dass ein Baum, um als binärer Suchbaum betrachtet zu werden, die Eigenschaft "binärer Suchbaum" haben muss, die eine bestimmte Reihenfolge beim Einfügen des Baums erfordert.
Juan Zamora

@JuanZamora Bei der Frage geht es nicht um binäre Suchbäume, sondern nur um vertexbeschriftete vollständige binäre Bäume. Zweitens geht es, selbst wenn es um BSTs geht, darum, ein lokales Minimum zu finden, nicht das globale Minimum.
Luke Mathieson
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.