A menudo se dice que la búsqueda de tabla hash funciona en tiempo constante: se calcula el valor hash, lo que le da un índice para una búsqueda de matriz. Sin embargo, esto ignora las colisiones; en el peor de los casos, todos los elementos caen en el mismo depósito y el tiempo de búsqueda se vuelve lineal ( ).
¿Existen condiciones en los datos que pueden hacer que la búsqueda de tablas hash sea realmente ? ¿Es eso solo en promedio, o puede una tabla hash tener O ( 1 ) peor búsqueda?
Nota: vengo desde la perspectiva de un programador aquí; cuando almaceno datos en una tabla hash, casi siempre son cadenas o algunas estructuras de datos compuestos, y los datos cambian durante la vida útil de la tabla hash. Entonces, aunque aprecio las respuestas sobre los hashes perfectos, son lindos pero anecdóticos y no prácticos desde mi punto de vista.
Seguimiento de PS: ¿Para qué tipo de datos son las operaciones de tabla hash O (1)?
fuente
Respuestas:
Hay dos configuraciones en las que puede obtener peor de los casos.O(1)
Si su configuración es estática, entonces el hashing FKS obtendrá las garantías peor de los casos . Pero como indicó, su configuración no es estática.O(1)
Si usa el hash de Cuckoo, las consultas y eliminaciones son peor de los casos, pero la inserción es solo O ( 1 ) esperada. El hash de cuco funciona bastante bien si tiene un límite superior en el número total de inserciones y establece que el tamaño de la tabla sea aproximadamente un 25% más grande.O(1) O(1)
Hay más información aquí .
fuente
Esta respuesta resume partes de TAoCP Vol. 3, Cap. 6.4.
Encadenamiento
Sondeo lineal
Hashing doble
Tenga en cuenta que eliminar elementos de tablas y extenderlas tiene diferentes grados de dificultad para los métodos respectivos.
Hashtable
fuente
fuente
fuente