Kann jemand die Suchzeit für einen binären Suchbaum (d. H. Worst-Case, Best-Case und Average-Case) berechnen?Suchzeiten für den binären Suchbaum
Antwort
Für einen nicht selbstausgleichenden Baum (möglich, aber ungewöhnlich für einen Suchbaum) ist der schlechteste Fall O (n), was für den entarteten Binärbaum (eine verkettete Liste) gilt.
In diesem Fall müssen Sie im Durchschnitt die Hälfte der Liste suchen, bevor Sie das gewünschte Element finden.
Der beste Fall ist O (log n) für einen perfekt ausgeglichenen Baum, da Sie den Suchraum für jede Baumebene halbiert haben.
Durchschnittliche Fall ist irgendwo zwischen diesen beiden und hängt ganz von den Daten :-)
Da man selten die Folge zu steuern bekommen, in der Daten in einen Baum eingefügt wird, selbst ausgleichenden Bäume sind in der Regel bevorzugt, da Obwohl sie bei jeder Einfügung oder Löschung eine kleine Menge an Zeit hinzufügen, beschleunigen sie die Suche erheblich. Ihr schlimmster Fall ist so viel besser als unausgeglichene Bäume.
8
_______/ \_______
/ \
4 12
__/ \__ __/ \__
/ \ / \
2 6 10 14
/\ /\ /\ /\
1 3 5 7 9 11 13 15
In diesem perfekt ausgewogenen Baum, können Sie, dass Sie für alle n
Ebenen erhalten 2 n -1 Knoten sehen. Das bedeutet, dass Sie für 15 Knoten nie mehr als vier Knoten suchen müssen, um diesen zu finden (z. B. um zu finden, suchen Sie 8
, 12
, 14
und 13
). Das ist, wo das Protokoll n Abbildung stammt.
Ein entarteter unausgeglichener Baum, wie bereits erwähnt, ist eine verkettete Liste. Wenn Ihre Daten in Folge angekommen und Sie es in einem unausgeglichenen binären Baum eingefügt, dann würden Sie erhalten:
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9 -+
|
+------------------------------------------+
|
+-> 10 -> 11 -> 12 -> 13 -> 14 -> 15
Um 13
in diesem Fall zu finden, würden Sie 1
, 2
, 3
, 4
, suchen müssen 5
, 6
, 8
, 9
, 10
, 11
, 12
und 13
, daher O (n).
Möchte diesen als "Hausaufgabe" markieren. Hier ist ein guter Ausgangspunkt: http://en.wikipedia.org/wiki/Binary_search_tree
Im Allgemeinen ist eine ausgewogene binärer Suchbaum ein Worst-Case-Lookup von O hat (log n), am besten Fall von O (1) (wenn der gewünschte Wert ist die Wurzel) und ein durchschnittlicher Fall von O (log n) (die Blätter enthalten exponentiell mehr Werte als ihre Eltern). Der schlimmste Fall ist der interessanteste und wird leicht erkannt, wenn man erkennt, dass die erste Ebene eines binären Baums 1 Knoten hat, der zweite 2, der dritte 4 und so weiter. Somit ist die Anzahl der Knoten in einem Binärbaum der Tiefe n genau 2^n - 1. Das mathematische Inverse der Exponentialfunktion ist der Logarithmus, also: O (log n).
Ein unausgewogener Baum so schlecht, wie eine verknüpfte Liste sein kann und eine Form wie die folgenden hat:
1
/\
2
/\
3
/\
4
/\
In dieser Situation ist die Zugriffszeit Worst-Case ist O (n).
Ein unsymmetrischer Baum ist ein Baum, der nicht perfekt ausgeglichen ist (d. H. Die Tiefe eines Teilbaums unterscheidet sich von einem anderen Teilbaum). Worauf du beziehst (die verknüpfte Liste), ist ein entarteter Baum. – paxdiablo
Ändern meiner Antwort etwas genauer zu sein. Im Allgemeinen, wenn Sie nicht "ausgeglichen" angeben, ist der schlechteste Fall O (n), unabhängig davon, ob er tatsächlich * entartet ist. –
Das Bild in der Post ist bekannt als - 'Skewed Binary Search Tree' – RBT
Am besten ist O (1). Das erste Element könnte das Objekt sein, nach dem Sie suchen. der schlechteste Fall ist O (n), dh in einem schiefen Baum, und der durchschnittliche Fall ist O (lg n).
@paxdiablo Nicht wahr. http://bigocheatsheet.com/ – safaiyeh
- 1. Sortiertes Array in den binären Suchbaum einfügen
- 2. Suchen Sie den Median im binären Suchbaum
- 3. vergleichen Hash mit binären Suchbaum
- 4. Finde die nächsten Knoten im binären Suchbaum
- 5. Aktualisieren von Daten in einem binären Suchbaum
- 6. Java: Deep Copy im binären Suchbaum Klasse
- 7. Wie validiert man einen binären Suchbaum?
- 8. Probleme mit einem binären Suchbaum entfernen Funktion
- 9. Verbinden von Geschwistern im binären Suchbaum
- 10. C# einen binären Suchbaum in Console anzeigen
- 11. Wie implementiere ich einen & mut-Iterator für einen binären Suchbaum?
- 12. Wie kann ich die Blätter in einem binären Suchbaum bekommen?
- 13. Destruktor für binäre Suchbaum
- 14. Finden Sie die Anzahl der möglichen binären Suchbaum
- 15. Erstellen Sie einen vollständigen binären Suchbaum aus der Liste
- 16. Get Intervall von binären Suchbaum so schnell wie sortierte Array
- 17. Löschen Knoten Funktion löscht bestimmte Knoten aus einem binären Suchbaum
- 18. Python erstellen einen binären Suchbaum mit der vorhandenen Funktion
- 19. C2678: Fehler beim Einfügen der binären Suchbaum C++
- 20. Häufigkeit von Knoten/Wert in einem binären Suchbaum
- 21. Sortiertes Array in binären Suchbaum mit minimaler Höhe konvertieren
- 22. binärer Suchbaum
- 23. Fehlerhafter Operandentyp für den binären Operator '^'
- 24. toString-Methode für binäre Suchbaum
- 25. binärer Suchbaum mit Supernodes Algorithmus
- 26. Komprimiert SVN den binären Inhalt?
- 27. Wie man einen binären Baum in einen binären Suchbaum in-place umwandelt, d. H. Wir können keinen zusätzlichen Raum verwenden
- 28. C# Binär Suchbaum Problem
- 29. So löschen Sie einen Knoten in einem binären Suchbaum mit Rekursion
- 30. binäre Suchbaum inorder iterator C++
aber was ist, wenn es völlig zufällige Zahlen und keine in der Nähe ausgeglichen ist, gibt es eine Art von Methode, um die Fälle herauszufinden? –
Nein, weil es sowohl auf Ihren Baum als auch darauf ankommt, wonach Sie suchen. – paxdiablo
Algorithmen existieren, um Bäume beim Einfügen/Löschen auszugleichen. Somit sind zufällige Daten kein Problem für die richtige Implementierung. –