estructura de datos equilibrada en forma de árbol que cambia de tamaño a tamaños principales

Relacionado con esto: pregunta de desbordamiento de pila,

donde descubrí que los diccionarios .Net cambian de tamaño al siguiente tamaño principal que es al menos el doble del tamaño actual, me preguntaba si hay alguna estructura de datos equilibrada en forma de árbol que pueda cambiar de tamaño a tamaños principales (similar a B-Trees o Binomial árboles tal vez).

¿Cuál es la estructura de datos en forma de árbol detrás de los diccionarios de .Net?

Gracias.

preguntado el 09 de enero de 11 a las 12:01

2 Respuestas

El diccionario utiliza un tabla de picadillo algoritmo, que almacena los datos en una matriz, es esta matriz la que se dimensiona / redimensiona en función de los números primos.

. NET OrdenarDiccionario utiliza una Árbol rojo-negro estructura para mantener los pares clave / valor. Dado que el árbol rojo-negro no se almacena en una matriz fija, sino más bien como una serie en nodos con nodos secundarios izquierdo / derecho, no existe realmente un concepto de dimensionar nada, ya que los nodos se agregan al árbol al que se rota el árbol mantener el equilibrio.

Respondido el 09 de enero de 11 a las 15:01

Dictionary != SortedDictionary. Y dudo SortedDictionary cambia el tamaño a números primos. - Moinudin

@marcog, no creo haber dicho ninguna de esas cosas? Digo que el diccionario usa Hashtable, el diccionario clasificado usa el árbol rojo-negro y que el árbol es no es almacenado en una matriz y hay no es un concepto de dimensionar cualquier cosa. - Chris Taylor

bueno, es aconsejable no asignar memoria para los nodos que no usa ... eso es cierto - costoso.petrisor

No ahora que editaste tu respuesta. Por favor, no se esconda detrás de las ediciones. - Moinudin

@marcog, les aseguro que no soy tan infantil, solo edité la respuesta para agregar información en la tabla hash y los enlaces. Creo que leyó mal la respuesta inicial. - Chris Taylor

Los diccionarios de .Net se implementan como hastables, que no es una estructura de datos en forma de árbol en absoluto. La pregunta te vinculas a explica por qué las tablas hash se redimensionan mejor a un número primo.

En cuanto a las estructuras en forma de árbol, no puedo imaginar un propósito para cambiar el tamaño a un primo. No tiene mucho sentido. Sin embargo, lo que tiene sentido es cambiar el tamaño de una estructura de árbol equilibrada a un árbol completo, que para un árbol binario sería 2n-1.

contestado el 23 de mayo de 17 a las 15:05

porque eventualmente puede tener que cambiar el tamaño a números enormes y mantener nodos adicionales es memoria ineficaz, mientras que mantener un árbol desequilibrado puede dar tiempos de búsqueda no lineales, o incluso peor: costoso.petrisor

y también el std :: map de C ++ implementado como hastabled, pero mantenido en un árbol rojo-negro para una búsqueda rápida, agregar y eliminar propósitos costoso.petrisor

@costy Puede tener sentido cambiar el tamaño, pero no hay ninguna ventaja en elegir un tamaño principal. std::map se implementa como un árbol rojo-negro, no como una tabla hash. - Moinudin

@marcog, std :: map se implementa normalmente como un árbol rojo-negro y no como un árbol AVL. - Chris Taylor

hubo esta conferencia L9 que vi en línea donde un tipo que trabajaba para mantener el STL para VS2010 dijo que std :: map se implementa con un árbol rojo-negro, también dijo sobre otro compilador que usaba árboles rojo-negro para std :: mapa pero olvidé cuál - costoso.petrisor

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.