¿Por qué Google sparsehash la biblioteca de código abierto tiene dos implementaciones: una tabla hash densa y una esparcida?¿Cuál es la idea principal de implementación detrás de la tabla hash dispersa?
17
A
Respuesta
16
La hashtable densa es la implementación habitual de hash textbook.
La tabla hash dispersa solo almacena los elementos que se han establecido, divididos en varias matrices. Citando el comments en la implementación de mesas dispersas:
// The idea is that a table with (logically) t buckets is divided
// into t/M *groups* of M buckets each. (M is a constant set in
// GROUP_SIZE for efficiency.) Each group is stored sparsely.
// Thus, inserting into the table causes some array to grow, which is
// slow but still constant time. Lookup involves doing a
// logical-position-to-sparse-position lookup, which is also slow but
// constant time. The larger M is, the slower these operations are
// but the less overhead (slightly).
a saber qué elementos de las matrices se establecen, una mesa de escasa incluye un mapa de bits:
// To store the sparse array, we store a bitmap B, where B[i] = 1 iff
// bucket i is non-empty. Then to look up bucket i we really look up
// array[# of 1s before i in B]. This is constant time for fixed M.
manera que cada elemento incurre en una sobrecarga de solo 1 bit (en el límite).
3
sparsehash es una forma eficiente de memoria de asignar claves a valores (1-2 bits por clave). Los filtros Bloom pueden darle incluso menos bits por clave, pero no agregan valores a claves que no sean externas/probablemente internas, lo que es un poco menos que un poco de información.
Cuestiones relacionadas
- 1. ANDROID: ¿Cuál es la idea principal detrás de usar strings.xml?
- 2. ¿Cuál es la gran idea detrás de la implementación de AOP
- 3. Algoritmo de hash para la implementación de la tabla hash
- 4. ¿Cuál es la idea detrás de 'mango GC Fijado'?
- 5. Implementación de tabla hash
- 6. ¿Cuál es la idea detrás del acceso de atributos privados dentro de main? Java x C++
- 7. ¿Cuál es la magia detrás de Lightstreamer?
- 8. ¿Cuál es la idea detrás de los sprites de imágenes, cómo abordarlo?
- 9. ShowDialog() detrás de la ventana principal
- 10. Complejidad del tiempo de la tabla hash
- 11. ¿Cuál es la idea detrás de escalar una imagen usando lanczos?
- 12. Cuál es la matemática detrás de la rueda de colores
- 13. ¿Hay una implementación de matriz dispersa en la biblioteca .NET?
- 14. Cuál es la mejor implementación de MPI
- 15. ¿Cuál es el algoritmo detrás de la generación de buscaminas
- 16. ¿Obtener la clave principal de la tabla?
- 17. ¿Cuál es el algoritmo detrás de sleep()?
- 18. Cifrado de cadena de conexión, ¿cuál es la idea?
- 19. ¿Cuál es el concepto detrás de la compresión zip?
- 20. ¿Cuál es la razón detrás de Object.clone() está protegido
- 21. ¿Cuál es la tecnología detrás de Windows Azure REST Api?
- 22. ¿Cuál es la razón detrás de cbegin/cend?
- 23. ¿Cuál es la tabla index_event de Magento
- 24. Javassist. ¿Cuál es la idea principal y dónde el uso real?
- 25. ¿Cuál es la implementación canónica del descuento?
- 26. ¿Cuál es la mejor forma de ordenar una tabla hash por valor?
- 27. Buscando una buena implementación de tabla hash en C
- 28. ¿Cuál es el concepto detrás de R.java?
- 29. ¿Es una buena idea crear un tipo personalizado para la clave principal de cada tabla de datos?
- 30. ¿Cuál es la implementación recomendada para hashing OLE variantes?
Creo que estoy malinterpretando la pregunta en la publicación. ¿No habría hashtables dispersas + hashtables densas == todas las hashtables? Y si es así, ¿por qué la biblioteca se llama "escaso"? – cHao
BTW: [documentación de Google Code] (http://google-sparsehash.googlecode.com/svn/trunk/doc/implementation.html). – cHao