Μια ισορροπημένη BST είναι προτιμότερο αν χρειαστεί να προστατεύσει τη δομή των δεδομένων σας από την λανθάνουσα κατάσταση αιχμές και συγκρούσεις hash επιθέσεις.
Ο πρώην συμβαίνει όταν μια συστοιχία υποστηριζόμενη δομή αναπτύσσεται ένας παίρνει αλλάξει μέγεθος, το τελευταίο είναι ένα αναπόφευκτο ιδιότητα του hashing αλγορίθμου ως προβολή από άπειρο χώρο σε περιορισμένο ακέραιος εύρος.
Ένα άλλο πρόβλημα στο .NET είναι ότι υπάρχει ΑΕ, και με ένα αρκετά μεγάλο λεξικό πέσετε σε κατακερματισμό ΑΕ. Σε αυτή την περίπτωση μπορείτε να χρησιμοποιήσετε ένα BST, δίνοντας μια τιμή μεγαλύτερη αλγοριθμικής τάξη πολυπλοκότητας.
Με λίγα λόγια, με μια BST που υποστηρίζεται από το σωρό κατανομή θα έχετε χειρότερη στιγμή περίπτωση O (log (N)), με hashtable μπορείτε να πάρετε O (N) χειρότερη στιγμή υπόθεση.
BST έρχεται στην τιμή των O (log (N)) μέσος χρόνος, χειρότερα τοποθεσία μνήμη cache και κατανομές σωρό, αλλά έχει εγγυήσεις λανθάνουσα κατάσταση και προστατεύεται από το λεξικό επιθέσεις και τον κατακερματισμό της μνήμης.
Αξίζει να σημειωθεί ότι η BST είναι επίσης ένα θέμα του κατακερματισμού της μνήμης σε άλλες πλατφόρμες, δεν χρησιμοποιώντας μια συμπίεση συλλέκτη σκουπιδιών.
Όσο για το μέγεθος της μνήμης, η τάξη .NET Dictionary`2 είναι περισσότερη μνήμη αποτελεσματική, επειδή αποθηκεύει τα δεδομένα ως off-σωρό συνδεδεμένη λίστα, αξίας οποία απλώς αποθηκεύει και να αντισταθμίσει τις πληροφορίες. BST οφείλει να αποθηκεύει κεφαλίδα αντικειμένου (όπως κάθε κόμβος είναι ένα παράδειγμα της κατηγορίας στο σωρό), δύο δείκτες, και ορισμένες επαυξημένης δεδομένων δέντρο για ισορροπημένη δέντρα. Για παράδειγμα, ένα κόκκινο-μαύρο δέντρο θα χρειαστεί μια boolean ερμηνευθεί ως χρώμα (κόκκινο ή μαύρο). Αυτό είναι τουλάχιστον 6 λέξεις μηχάνημα, αν δεν κάνω λάθος. Έτσι, κάθε κόμβος σε ένα κόκκινο-μαύρο δέντρο στο σύστημα 64-bit είναι τουλάχιστον:
3 λέξεις για την κεφαλίδα = 24 bytes 2 λέξεις για τους δείκτες παιδί = 16 bytes 1 λέξη για το χρώμα = 8 bytes τουλάχιστον 1 λέξη για την τιμή 8+ bytes = 24 + 16 + 8 + 8 = 56 bytes (+8 bytes αν το δέντρο χρησιμοποιεί ένα δείκτη κόμβο γονέα).
Την ίδια στιγμή, το ελάχιστο μέγεθος της εισόδου λεξικού θα είναι μόλις 16 bytes.