Estoy luchando con el concepto de cuándo usar árboles de búsqueda binarios y cuándo usar diccionarios.C# Árboles binarios y diccionarios
En mi aplicación hice un pequeño experimento que usó la biblioteca C5 TreeDictionary
(que creo que es un árbol de búsqueda binario rojo-negro), y el diccionario C#. El diccionario siempre fue más rápido en las operaciones de agregar/buscar y también usó siempre menos espacio de memoria. Por ejemplo, en 16809 <int, float>
entradas, el diccionario utilizó 342 KiB mientras que el árbol usó 723 KiB.
Pensé que se suponía que las BST debían ser más eficientes en cuanto a la memoria, pero parece que un nodo del árbol requiere más bytes que una entrada en un diccionario. ¿Lo que da? ¿Hay un momento en que las BST son mejores que los diccionarios?
Además, como una pregunta complementaria, ¿alguien sabe si existe una estructura de datos más rápida + más eficiente en cuanto a la memoria para almacenar <int, float>
pares de acceso de tipo diccionario que cualquiera de las estructuras mencionadas?
Honestamente, no me preocuparía la eficacia de la memoria si su aplicación está utilizando 723 KB. Probablemente comenzaría a pensar en mejores estructuras de datos cuando golpee, digamos, 50 MB para almacenar la colección. – Juliet
El objeto que contiene la estructura de datos podría tener miles de instancias, entonces cada kB cuenta. –
Pruebe 'SortedList' - debe tener la sobrecarga de memoria más baja de las diferentes opciones. Si no es demasiado lento (en su aplicación) y siempre KB realmente importa, ciertamente parece viable. Agregar/eliminar será más lento, pero la búsqueda debe ser similar a la BST. –