Konkrete Beispiele für binäre Suchbäume mit?

stimmen
14

Ich verstehe, wie binäre Suchbäume implementiert werden, aber ich bin nicht sicher, was sind die Vorteile der es über die Hash-Tabellen verwenden, die meisten Programmiersprachen in ihre Standardbibliotheken aufgebaut haben.

Könnte jemand bitte mit Binärbäumen Suche auflösbar Beispiele für reale Probleme zur Verfügung stellen?

Veröffentlicht am 16/02/2011 um 00:44
quelle vom benutzer
In anderen Sprachen...                            


5 antworten

stimmen
1

Ein Beispiel, wo ein binärer Baum erforderlich ist, ist binär Raum Partitionen in der Computergrafik

http://en.wikipedia.org/wiki/Binary_space_partitioning

Ein binärer Baum ist erforderlich, da der Algorithmus die Erhaltung der Beziehungen zwischen den Knoten im Binärbaum erfordert. Es gibt viele andere Algorithmen, wo die Struktur des Baumes wichtig ist, und so eine Hash-Tabelle ist keine geeignete Struktur.

Ein weiterer guter Grund für einen binären Baum anstelle einer Hash-Tabelle verwendet, ist, wenn man nicht so leicht eine effiziente Hash für Ihre Datenelemente erzeugen kann, aber Sie können eine Vergleichsfunktion erzeugen.

Oft für die einfache Speicherung und den Abruf von Daten eine Hash-Tabelle ist optimal, aber komplexer zu implementieren.

Beantwortet am 16/02/2011 um 00:53
quelle vom benutzer

stimmen
0

Eines der am meisten übersehen ist, dass viele Dateisysteme Binärbäumen verwenden Verzeichnislisten zu verwalten. Sie benutzen selten einen einfachen binären Baum, sondern eine gewisse Variation wie ein B-Baum. Dies liegt daran, die Frage des auf Plattenspeicher des Baumes auf die Details der Implementierung sehr wichtig ist. Der Grund, warum sie diese Art von Struktur verwenden ist für die Effizienz und Geschwindigkeit. Auf diese Weise kann sie Dinge tun, wie Unterstützung Tausende von Dateien in einem Verzeichnis. Vergleiche für Dateierstellung und Löschzeiten markieren Effizienzen für diesen Aspekt des Dateisystems.

Binärbäumen sind auch auf vielen Spielen verwendet, die 3D-Objekte machen. Auch hier ist der Grund, Geschwindigkeit. In der Tat ist, die Geschwindigkeit so wichtig, dass einige Spiele-Engines, wie die Quake-Engine tatsächlich der binäre Baum vorab erzeugt und voroptimierten als Teil des Kartenerstellungsprozesses.

Beantwortet am 16/02/2011 um 00:56
quelle vom benutzer

stimmen
0

Eine Sache zu beachten ist, dass binärer Suchbaum ist platzsparend. Zum Beispiel haben Sie 10 ganze Zahlen zu speichern, und Sie haben eine Hash-Funktion, die von 0 abbildet - 99, dann müssen u ein Array von 100 Zahlen. Wenn Sie binärer Suchbaum verwendet, dann würden Sie nur so viel Speicher zuweisen, wie durch 10 Elemente erforderlich

Beantwortet am 16/02/2011 um 00:57
quelle vom benutzer

stimmen
29

Es gibt ein paar theoretischen Vorteile von binären Suchbäumen über Hash-Tabellen:

  1. Sie speichern ihre Elemente in sortierter Reihenfolge . Das bedeutet , dass , wenn Sie den Behälter in einer Art und Weise gespeichert werden sollen , wo man leicht die Werte in sortierter Reihenfolge besuchen, ein BST ist wahrscheinlich eine bessere Wahl als eine Hash - Tabelle. Zum Beispiel, wenn Sie eine Sammlung von Studenten speichern wollen , und dann alle Schüler in alphabetischer Reihenfolge ausdrucken, ist ein BST eine wesentlich bessere Wahl als eine Hash - Tabelle.

  2. Sie unterstützen effizient Bereichsabfragen. Da BSTs in sortierter Reihenfolge gespeichert sind, ist es einfach , Fragen der Form zu beantworten „ welche Werte liegen im Bereich [x, y]?“ in einem binären Suchbaum. Um dies zu tun, haben Sie eine Suche in dem Baum für das kleinste Element größer als x und dem größten Element kleiner ist als y, dann durchlaufen die Elemente des Baumes zwischen ihnen. Beide dieser Abfragen in O (LG n) die Zeit in einem ausgeglichenen Baum laufen, so dass die Gesamtlaufzeit für diesen Vorgang ist O (lg n + k), wobei k die Anzahl der Elemente passend die Abfrage.

  3. Sie unterstützen effizient nächsten Nachbarn Abfragen. Hash - Tabellen sind speziell so konzipiert, dass auch leicht unterschiedliche Produkte völlig unterschiedlichen Hash - Codes. Dies gibt die Hash - Werte der Dispersion die sie benötigen , Clustering zu viele Elemente an einer Stelle zu vermeiden. Es bedeutet aber auch , dass Sie eine lineare Abtastung über die Hash - Tabelle tun , müssen Elemente zu finden , die „nahe“ sein könnte , was Sie suchen. Mit einem BST, können Sie effizient die Vorgänger und Nachfolger von Wert finden Sie möchten, auch wenn es nicht in dem Baum ist.

  4. Sie können besser Worst-Case - Garantien haben. Die meisten Hashtabelle Implementierungen haben eine Art von entarteten Fall , in dem eine Operation O (n) im schlimmsten Fall verschlechtern können. Eine lineare Sondieren Hash - Tabelle oder eine verketteten Hash - Tabelle kann, mit einem schlechten Satz von Elementen erfordert O (n) Zeit pro lookup oder erfordert O (n) Zeit auf einem Aufguß. Einführen in einige Arten von ausgewogenen BSTs, wie rot / schwarz Bäume, AVL - Bäume oder AA Bäume, ist immer worst-case O (lg n).

Wenn Sie bereit sind BSTs zu aufwendigeren Baumstrukturen zu verallgemeinern, dann gibt es viele Anwendungen, in denen ein Baum verwendet werden kann, Probleme wesentlich effizienter als in einer Hash-Tabelle zu lösen. Hier ein paar Beispiele:

  1. kd-Bäume können Sie mehrdimensionale Daten speichern , während schnelle Bereichsabfragen in mehrdimensionalen Raum unterstützen, sowie effiziente Nearest-Neighbor - Lookups. Sie können sie für die Klassifizierung (faul Lernalgorithmen) oder Computational Geometry verwenden.

  2. Link / gefällte Bäume können verwendet werden , max-Flow - Probleme zu lösen , wesentlich effizienter als die meisten herkömmlichen Algorithmen erlauben würde. Gute Push / relabel Algorithmen verwenden diese ihre Implementierungen zu beschleunigen.

  3. Disjoint-Set Wald können Partitionen der Elemente zu halten , wie asymptotisch effizient wie möglich (amortisieren α (n) pro Update, wobei α (n) die inverse Funktion Ackermann ist) verwendet werden. Sie sind in vielen schnellen Minimum-Spanning - Tree - Algorithmen, sowie einige Maximum-Matching - Algorithmen verwendet.

  4. Binäre Heaps kann Prioritäts - Warteschlangen verwendet werden , effizient zu implementieren. Komplexere Bäume können verwendet werden , um zu bauen binomische Haufen und Fibonacci - Heaps , die in der theoretischen Informatik von großer Bedeutung sind.

  5. Entscheidungsbäume können in maschinellem Lernen für die Klassifizierung verwendet werden, und als ein Modell in der theoretischen Informatik Schranken für die Laufzeiten von verschiedenen Algorithmen zu beweisen.

  6. Ternary Suchbäume sind eine Alternative zu Versuchen , die auf so leicht modifizierten BST basieren. Sie ermöglichen sehr schnelles Nachschlagen und Einfügen von Elementen und für spärliche Datenmengen sind sehr prägnant.

  7. B-Bäume werden von vielen Datenbanksystemen verwendet , um effizient Elemente nachschlagen , wo Plattenzugriff ein limitierender Faktor ist.

  8. Binary Space Partitioning Bäume eine Verallgemeinerung von kd-Bäume sind , die schnell eingesetzt werden kann , um Computergrafik zu machen (sie wurden verwendet , im ursprünglichen Spiel Doom zu optimieren Rendering) und tun Kollisionserkennung.

  9. BK-Bäume können Sie schnell alle Worte bestimmen , die innerhalb eines bestimmten Editierdistanz eines anderen Wortes sind und generell alle Punkte in einem metrischen Raum in einem gewissen Abstand von einem anderen Punkt zu finden.

  10. Fusion Bäume sind eine Alternative zu Hash - Tabellen für Integer - Schlüssel , die eine extrem schnelle Unterstützung haben für Lookups, Insertionen und Deletionen.

  11. van Emde Boas Bäume eine weitere alternative Tabellen - Hash für ganzzahlige Schlüssel , die Lookup unterstützen, Insertion, Deletion, Nachfolger und Vorgänger in O (LG n) der Zeit pro Element. Einige Datenbanksysteme verwenden VEB Bäume Leistung zu optimieren.

Ich bin mir nicht sicher, wie beim Thema diese Antwort ist, aber es sollte Ihnen ein Gefühl für die geben, wie wunderbar und mächtig BSTs und allgemeineren Baumstrukturen sein kann.

Beantwortet am 16/02/2011 um 01:05
quelle vom benutzer

stimmen
0

Dies sollte wahrscheinlich ein Kommentar, aber selbst ausgleich BST (n) (log (n)) sind weit verbreitet und nicht BSTs verwendet werden. Plain BSTs hat Worst-Case-O (N) Einsetz- / Entfernungszeit.

Beantwortet am 16/02/2011 um 03:14
quelle vom benutzer

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