Erstellen Sie einen ausgeglichenen binären Suchbaum aus einem Strom von ganzen Zahlen

stimmen
10

Ich habe gerade ein Vorstellungsgespräch beendet, und ich mit dieser Frage zu kämpfen hatte, die, die auf einem 15 Minuten Interview als eine sehr schwierige Frage, wie mir scheint.

Die Frage war: Schreiben Sie eine Funktion, die einen Strom von ganzen Zahlen (ungeordneter) gegeben, baut ein ausgeglichener Suchbaum. Jetzt können Sie nicht für die Eingabe zu Ende warten (es ist ein Strom), so müssen Sie den Baum auf der Fliege balancieren.

Meine erste Antwort war einen Rot-Schwarz-Baum zu verwenden, was natürlich die Arbeit erledigt, aber ich muß annehmen, dass sie mir einen roten Schwarz-Baum in 15 Minuten implementieren nicht erwartet.

Also, gibt es eine einfache Lösung für dieses Problem, das ich nicht bewusst bin?

Vielen Dank,

Dave

Veröffentlicht am 29/08/2011 um 22:25
quelle vom benutzer
In anderen Sprachen...                            


3 antworten

stimmen
3

AA Bäume sind etwas einfacher als Rot-Schwarz Bäume, aber ich konnte nicht ein aus der Spitze von meinem Kopf implementieren.

Beantwortet am 29/08/2011 um 22:28
quelle vom benutzer

stimmen
9

Ich persönlich denke , dass der beste Weg , dies zu tun wäre für einen randomisierte binären Suchbaum wie eine gehen Treap . Dies garantiert nicht unbedingt , dass der Baum wird ausgeglichen, aber mit hoher Wahrscheinlichkeit wird der Baum eine gute Balance Faktor haben. A Treap arbeitet , indem jedes Element des Baumes mit einer gleichmäßig Zufallszahl vermehren, so gewährleistet , dass der Baum ein binärer Suchbaum mit Bezug auf die Tasten und einen Haufen in Bezug auf die einheitlichen Zufallswerten ist. Einsetzen in eine Treap ist extrem einfach:

  1. Wählen Sie eine Zufallszahl an das neu hinzugefügte Element zuzuordnen.
  2. Legen des Elements in die BST unter Verwendung von Standard-BST Insertion.
  3. Während der neu eingefügte Element der Taste größer ist als die Schlüssel des übergeordneten, führen einen Baum Drehung das neue Element über seine Mutter zu bringen.

Der letzte Schritt ist die einzige wirklich hart, aber wenn man einige Zeit hatte es zu arbeiten, auf einem Whiteboard Ich bin ziemlich sicher, dass Sie dies umsetzen könnte in einem Interview on-the-fly.

Eine weitere Option , die funktionieren könnte wäre, eine verwenden spreizt Baum . Es ist eine andere Art von Fast BST , die umgesetzt werden können , haben Sie einen Standard BST Insert - Funktion übernehmen und die Fähigkeit Baum Drehungen zu tun. Wichtig sind, spreizen Bäume extrem in der Praxis schnell, und es ist bekannt , dass sie (bis auf einem konstanten Faktor) mindestens so gut wie jeder anderen statischen binären Suchbaum sind.

Je nachdem , was gemeint ist „Suchbaum,“ könnte man auch überlegen , die ganzen Zahlen in irgendeiner Struktur für die Suche von ganzen Zahlen optimiert Speicherung. Zum Beispiel könnten Sie ein verwenden bitweise trie die ganzen Zahlen zu speichern, die Lookup - in Zeit proportional zu der Anzahl von Bits in einem Maschinenwort unterstützt. Dies kann sehr gut umgesetzt werden , um eine rekursive Funktion über die Bits zu suchen, und erfordert keine Art von Drehungen. Wenn Sie eine Implementierung in 15 Minuten zu sprengen benötigt, und wenn der Interviewer Sie von den Standard binären Suchbäume abweichen können, dann könnte dies eine große Lösung sein.

Hoffe das hilft!

Beantwortet am 29/08/2011 um 22:33
quelle vom benutzer

stimmen
1

Eine der einfachsten ausgeglichenen binären Suchbaum ist BB (α) -Baum. Sie wählen die Konstante α, die besagt , wie viel unausgewogen kann der Baum erhalten. Zu allen Zeiten #descendants(child) <= (1-α) × #descendants(node)müssen halten. Sie behandeln es als normale binäre Suchbaum, aber wenn die Formel zu einem bestimmten Knoten gelten nicht mehr, man muss nur den Teil des Baumes von Grund auf neu erstellen, so dass sie perfekt ausbalanciert ist.

Der Amortisationszeitkomplexität für Insertion oder Deletion ist noch O (log N), ebenso wie mit anderen ausgewogenen Binärbäume.

Beantwortet am 29/08/2011 um 22:49
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more