Warum Binary Search Trees?

stimmen
6

Ich lese binären Suchbaum und dachte, warum brauchen wir BST überhaupt? All die Dinge , soweit ich weiß , kann auch einfach sortierten Arrays sein erreichen. Für zB - Um einen BST mit n Elementen zu bauen, erfordern wir n*O(log n)Zeit also O(nlog n)und Lookup - Zeit ist O(log n). Aber dieses Ding kann auch Array werden erreichen. Wir können eine sortierte Array (erfordert O(nlog n)Zeit) und Lookup - Zeit, dass auch ist , O(log n)dh algo binäre Suche. Warum brauchen wir eine andere Datenstruktur überhaupt? Gibt es noch andere Verwendung / Anwendung von BST , die sie so besonders machen?

--Ravi

Veröffentlicht am 14/10/2010 um 16:28
quelle vom benutzer
In anderen Sprachen...                            


4 antworten

stimmen
4

Wie wäre es sortiert Einfügezeitpunkt?

Beantwortet am 14/10/2010 um 16:30
quelle vom benutzer

stimmen
1

In Grafikprogrammierung wenn Sie Objekt erweitert (dh, die ein Intervall in jeder Dimension darstellen und nicht nur ein Punkt) Sie sie auf die kleinste Stufe eines binären Baum hinzufügen können (in der Regel ein Octree), wo sie ganz passen.

Und wenn Sie den Baum / SortedList der O (n) Zufallsinsertion Zeit in einer Liste nicht untragbar langsam vorge berechnen. Einführungszeit in einem Baum auf der anderen Seite ist nur O (log (n)).

Beantwortet am 14/10/2010 um 16:36
quelle vom benutzer

stimmen
9

Arrays sind groß, wenn Sie schreiben reden einmal, oft Art von Wechselwirkungen lesen. Es ist, wenn Sie unten auf das Einfügen, Tauschen und Löschen in dem BST wirklich zu glänzen beginnen im Vergleich zu einem Array. Da sie Knoten basiert sind, anstatt basierend auf einem zusammenhängenden Teil des Speichers, die Kosten für ein Element der Bewegung entweder in die Sammlung oder die Sammlung aus sind schnell, während immer noch die sortierte Art der Sammlung zu halten.

Denken Sie daran, wie Sie die Differenz in Einfügung zwischen verknüpften Listen gegenüber Arrays. Dies ist eine grobe Vereinfachung, aber es hebt einen Aspekt des Vorteils, den ich oben erwähnt habe.

Beantwortet am 14/10/2010 um 16:53
quelle vom benutzer

stimmen
7

Stellen Sie sich mit einer Million Elemente eines Arrays haben.

Sie wollen 5 ein Element an der Stelle einzufügen.

So fügen Sie am Ende des Feldes und dann sortieren.

Lassen Sie uns sagen, dass das Array voll ist; das ist O (n log n), die 1.000.000 * 6 = 6.000.000 Operationen sind.

Stellen Sie sich einen ausgeglichenen Baum haben.

Das ist O (log n), plus ein Bit für das Auswuchten = 6 + ein bisschen, nennen es 10 Operationen.

Also, Sie haben gerade ausgegeben 6.000.000 ops Sortierung Array. Sie wollen dann finden , dieses Element. Wie geht's? binäre Suche - O (log n) - und das ist genau das gleiche wie das, was Sie tun werden, wenn Sie in den Baum zu suchen!

Nun stellen Sie -another- Element zuordnen wollen.

Ihr Array ist voll! Wie geht's? das Array mit n zusätzlichen Elementen Neuzuweisung und das Los MEMCPY? Sie wollen wirklich 4Mbytes MEMCPY?

In einem Baum, fügen Sie einfach ein anderes Element ...

Beantwortet am 16/10/2010 um 10:14
quelle vom benutzer

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