Angenommen, ist ein Baum konstanten Grades, dessen Struktur wir nicht kennen. Das Problem besteht darin, den Baum durch Fragen des Formulars auszugeben : "Liegt der Knoten auf dem Pfad von Knoten zu Knoten ?". Angenommen, jede Abfrage kann von einem Orakel in konstanter Zeit beantwortet werden. Wir kennen den Wert von , die Anzahl der Knoten im Baum. Ziel ist es, den Zeitaufwand für die Ausgabe des Baums in zu minimieren .
Gibt es einen -Algorithmus für das obige Problem?
Angenommen, der Grad eines Knotens in beträgt höchstens 3.
Was ich weiß
Das Gehäuse mit begrenztem Durchmesser ist einfach . Wenn der Durchmesser des Baumes , können wir einen Divide-and-Conquer-Algorithmus erhalten:
Jeder binäre Baum hat ein gutes Trennzeichen, das den Baum in Komponenten mit einer Größe von nicht weniger als 1 / 3n unterteilt.
- Wählen Sie einen beliebigen Scheitelpunkt x. Wenn es ein gutes Trennzeichen ist, beschriften Sie das und wiederholen Sie den Vorgang.
- Finde alle 3 Nachbarn von x.
- Bewegen Sie sich in Richtung des Nachbarn mit der größten Anzahl von Knoten. Wiederholen Sie Schritt 2 mit dem Nachbarn.
Da das Finden des Trennzeichens höchstens Schritte dauert , erhalten wir einen -Algorithmus.
Ein randomisierter Algorithmus . (verschoben von den Kommentaren unten)
Wähle zwei Ecken x und y nach dem Zufallsprinzip. Mit einer Wahrscheinlichkeit von 1/9 liegen sie auf den gegenüberliegenden Seiten eines Trennzeichens. Wählen Sie den mittleren Knoten des Pfades von nach . Überprüfen Sie, ob es sich um ein Trennzeichen handelt, oder führen Sie eine binäre Suche durch.
Es dauert , bis das Trennzeichen gefunden ist. Wir erhalten also einen zufälligen -Algorithmus.
Hintergrund. Ich habe dieses Problem von einem Freund erfahren, der mit probabilistischen grafischen Modellen arbeitet. Das obige Problem entspricht ungefähr dem Erlernen der Struktur eines Verbindungsbaums unter Verwendung eines Orakels, das bei drei Zufallsvariablen X, Y und Z den Wert der gegenseitigen Information zwischen X und Y bei dem Wert von Z angeben kann. Wenn der Wert nahe ist bis Null können wir annehmen, dass Z auf dem Weg von X nach Y liegt.