Een evenwichtige BST is beter als je nodig hebt om uw gegevens structuur te beschermen tegen latentie spikes en hash botsingen aanvallen.
Eerstgenoemde gebeurt wanneer een array-backed structuur groeit een verkleind wordt, dit orgaan een onvermijdelijke eigenschap van hashingalgoritme als projectie van oneindige ruimte beperkte integer bereik.
Een ander probleem in .NET is dat er LOH, en met een voldoende groot woordenboek je in een LOH fragmentatie. In dit geval kunt u een BST gebruiken, het betalen van een prijs van grotere algoritmische complexiteit klasse.
Kortom, met een BST gesteund door de toewijzing hoop je krijgt het slechtste geval O (log (N)) de tijd, met hashtable je O (N) het slechtste geval tijd.
BST komt op een prijs van O (log (N)) gemiddelde tijd, erger cache plaats en nog veel meer hoop toewijzingen, maar het heeft latency garanties en is beschermd tegen dictionary-aanvallen en het geheugen fragmentatie.
Vermeldenswaard dat BST is ook een onderwerp om het geheugen fragmentatie op andere platformen, niet met behulp van een verdichten garbage collector.
Wat betreft de grootte van het geheugen, het .NET Dictionary`2 klasse is meer geheugen efficiënter, omdat deze gegevens als een off-heap gelinkte lijst, die uitsluitend bewaart waarde opslaat en offset informatie. BST moet objectkop slaan (zoals elk knooppunt een klasse-instantie op de heap), twee pointers en sommige Augmented boom gegevens gebalanceerde bomen. Bijvoorbeeld, een rood-zwarte boom een boolean geïnterpreteerd als kleur (rood of zwart) nodig. Dit is ten minste 6 machine woorden, als ik me niet vergis. Dus, elk knooppunt in een rood-zwarte boom op 64-bit systeem is een minimum van:
3 woorden van de kop = 24 bytes 2 woorden voor het kind wijzers = 16 bytes 1 woord voor de kleur = 8 bytes Minstens 1 woord de waarde 8+ bytes = 16 + 24 + 8 + 8 = 56 bytes (8 bytes als de boom maakt gebruik van een bovenliggend knooppunt pointer).
Tegelijkertijd zou de minimale grootte van het woordenboek binnenkomst slechts 16 bytes.