Un BST equilibrada es preferible si usted necesita para proteger su estructura de datos de los picos de latencia y ataques colisiones hash.
El primero sucede cuando una estructura de matriz con respaldo crece una consigue cambiar el tamaño, la última es una propiedad inevitable de algoritmo de hash como una proyección desde el espacio infinito a un rango entero limitado.
Otro problema en .NET es que hay LOH, y con un diccionario suficientemente grande se encuentra con una fragmentación LOH. En este caso se puede utilizar un BST, el pago de un precio de mayor clase de la complejidad algorítmica.
En resumen, con una BST respaldado por el montón de asignación se obtiene el tiempo peor caso de O (log (n)), la tabla hash se obtiene O (N) peor caso el tiempo.
BST tiene un precio de O (log (n)) tiempo promedio, peor localidad caché y más asignaciones del montón, pero no tiene garantías de latencia y está protegido de ataques de diccionario y la fragmentación de memoria.
Vale la pena señalar que la BST es también un objeto de la fragmentación de memoria en otras plataformas, no usando un recolector de basura de compactación.
En cuanto al tamaño de la memoria, la clase de .NET Dictionary`2 es más eficiente de la memoria, ya que almacena los datos como una lista enlazada fuera del montón, valor que sólo almacena la información de desplazamiento y. BST tiene que almacenar cabecera del objeto (como cada nodo es una instancia de clase en el montón), dos punteros, y algunos datos aumentado a árbol para árboles de equilibrado. Por ejemplo, un árbol rojo-negro tendría un valor lógico interpretado como el color (rojo o negro). Esto es al menos 6 palabras de la máquina, si no me equivoco. Por lo tanto, cada nodo en un árbol rojo-negro en el sistema de 64 bits es un mínimo de:
3 palabras para la cabecera = 24 bytes 2 palabras para los punteros niño = 16 bytes 1 palabra para el color = 8 bytes al menos 1 palabra para el valor 8+ bytes = 24 + 16 + 8 + 8 = 56 bytes (+8 bytes si el árbol utiliza un puntero nodo padre).
Al mismo tiempo, el tamaño mínimo de la entrada del diccionario sería tan sólo 16 bytes.