En balansert BST er å foretrekke hvis du trenger for å beskytte datastruktur fra latency pigger og hash kollisjoner angrep.
Den tidligere skjer når en matrise-støttede struktur vokser en blir endret størrelse, sistnevnte er en uunngåelig egenskap av nøkkeltransformeringsalgoritme som et fremspring fra uendelig plass til et begrenset utvalg heltall.
Et annet problem i .NET er at det er LOH, og med en tilstrekkelig stor ordbok du kjører inn i et LOH fragmentering. I dette tilfellet kan du bruke en BST, betaler en pris på større algoritmisk kompleksitet klasse.
Kort sagt, med en BST støttet av tildeling haugen får du verste fall O (log (N)) tid, med hashtabellen du får O (N) worst case tid.
BST kommer til en pris på O (log (N)) gjennomsnittlig tid, verre cache lokalitet og flere heap bevilgninger, men det har ventetid garantier og er beskyttet mot ordbokangrep og minne fragmentering.
Verdt å merke seg at BST er også en gjenstand for å minne fragmentering på andre plattformer, ikke ved hjelp av en komprimerende søppel samler.
Når det gjelder minnekapasiteten, er det NET Dictionary`2 klasse mer minne effektiv, fordi den lagrer data som et off-haug lenket liste, som bare lagrer verdien og offsetinformasjon. BST har til å lagre objekt header (som hver node er en klasse eksempel på haugen), to pekere, og noen forstørrede treet data for balanserte trær. For eksempel vil en rød-svart tre trenger en boolsk tolket som farge (rød eller svart). Dette er minst 6 maskin ord, hvis jeg ikke tar feil. Så, hver node i en rød-svart tre på 64-bit system er et minimum av:
3 ord for overskriften = 24 byte 2 ord for de underordnede pekerne = 16 byte ord en for den farge = 8 bytes minst ett ord for verdien 8+ bytes = 24 + 16 + 8 + 8 = 56 byte (byte +8 hvis treet benytter en foreldrenoden peker).
Samtidig ville minimumsstørrelsen på oppslagsord være bare 16 bytes.