¿Es necesario asumir que una distribución de claves para el hashing para trabajar con O (1) garantiza que sí lo tiene?

En el mundo ideal, supondría que hay una distribución de claves y esto le permitiría analizar un comportamiento de caso promedio. Sin embargo, en el mundo real, esto es extremadamente difícil de hacer por dos razones: (1) no está claro qué distribución usar, (2) sus matemáticas serán muy complejas si es posible.

Entonces, como señaló Daniel Tunkelang, hacemos una suposición simple (SUHA (informática)) y asumimos ciegamente que las cosas van a estar bien: es decir, las llaves se distribuirán milagrosamente de manera uniforme entre los cubos. Esta no es la única suposición simplificadora sobre las funciones hash, hay varias otras. Por ejemplo, en el análisis del hashing sensible a la localidad, suponemos que una función hash se vuelve a seleccionar de forma aleatoria e independiente para cada par de puntos de datos (consulte mis notas aquí: ¿Tiene el análisis de Hashing sensible a la localidad (LSH) un defecto fatal?)

Sin embargo, tenga en cuenta que la suposición SUHA (simple hashing uniforme) no le permite contar nada sobre la peor complejidad del caso (como lo señaló Mark Gritter). Le permite establecer una complejidad de caso promedio (garantía). Si desea optimizar para el peor de los casos, puede optar por utilizar una función hash perfecta. Para un conjunto de valores preespecificados (de un universo estático de posibles claves hash), la función hash perfecta siempre combina diferentes elementos en diferentes cubos. En otras palabras, la función de hash perfecta no tiene colisiones .

Un inconveniente aquí es que la función hash no está especificada para claves fuera de un dominio dado. Por ejemplo, puede hacer hash perfectamente enteros de 0 a 1000, pero no sabrá cómo lidiar con 1001. Un hash de Cuckoo no tiene esta limitación, al tiempo que permite responder consultas en O (1) en el peor de los casos.

Suena bien, ¿eh? Bueno, en realidad tanto el cuckoo como el hashing perfecto comparten una desventaja común: la indexación es un procedimiento mucho más costoso en comparación con el esquema de hashing clásico. AFAIK, solo hay garantías probabilísticas de un éxito. En la práctica, creo que es muy poco probable que no pueda crear una tabla hash, pero puede llevarle bastante tiempo hacerlo.

Bueno, claramente hay mejores y peores funciones hash. Con mejores funciones hash, las claves se distribuyen entre cubos de manera más o menos uniforme. Esto no es necesariamente cierto si su función hash es mala. En su famoso libro, Donald Knuth considera las pruebas de función hash en detalle. ¿Son completamente inútiles las malas funciones? En mi experiencia, esto no es necesariamente así (pero mejores funciones hash conducen a un rendimiento sustancialmente mejor).

Si bien incluso las malas funciones hash pueden estar bien para muchos fines prácticos, una selección de claves adversas y su orden de inserción pueden causar un problema de rendimiento real . Para muchas funciones hash, un pirata informático que conozca su función hash puede seleccionar una secuencia de teclas de este tipo que resultaría en un tiempo de inserción casi O (N) (N es el número de entradas).

Una solución a este problema (aún no se ha adoptado en todos los idiomas principales) es el hash aleatorio: se puede usar la misma función de hash, pero se seleccionará al azar algún parámetro de hash para cada tabla de hash que cree en su programa (consulte, por ejemplo, ¿Utiliza hashing aleatorio si le preocupa la seguridad?)

No.

Las garantías que nos brindan las tablas hash abarcan toda la información necesaria para que las garantías sean verdaderas. Sin embargo, creo que está equivocado en el hecho de que las tablas hash no garantizan O (1) el peor tiempo de ejecución para las operaciones de búsqueda e inserción. Por lo general, garantizan tiempos de ejecución promedio .

Dicho esto, hay algunas tablas hash, como el hash Cuckoo, que proporcionan el tiempo de búsqueda de O (1) en el peor de los casos y el tiempo de inserción de O (1) en el caso promedio . (Por supuesto, sin ningún supuesto sobre la distribución de claves)

Bueno, depende de qué funciones hash estés hablando. Si utiliza una función hash determinista, su comportamiento dependerá de la distribución de entrada de las claves. Puede ser particularmente malo si un oponente elige las llaves. Sin embargo, también puede usar funciones hash seleccionadas al azar de una familia de funciones de hashing Universal que funcionará bien con alta probabilidad para cualquier distribución de entrada (de las teclas). La aleatorización está en la elección de la función hash y ninguna distribución de las entradas puede ser mala para muchas opciones de la función.

Las tablas hash no vienen con una garantía O (1). Vienen con un caso promedio O (1).

La suposición estándar es que la función hash es lo suficientemente buena como para convertir cualquier distribución de claves presente en una distribución uniforme en cubos.

En la práctica, es ciertamente posible violar esta suposición, ya que la mayoría de las implementaciones de tablas hash usan hashes bastante débiles.

No. Solo necesita tener una función hash que satisfaga la Asunción de hash uniforme simple (SUHA).

More Interesting

¿Puede una computadora de agujero negro resolver todos los problemas de NP-Complete en tiempo polinómico?

¿Travel seles man proplem es np o np completo o np difícil?

Una fábrica produce bombillas defectuosas con cierta probabilidad, p. Se sabe que p es pequeño: alrededor del 1%, pero se desconoce el valor exacto. ¿Cuál es el tamaño de muestra que tomaría para estimar el valor de p?

¿Qué es una variable volátil?

¿Hasta qué punto puede comprimir un archivo comprimido de manera eficiente?

¿Es posible iterar a través de todos los números reales en [a, b] en cualquier lenguaje de programación? ¿Se acerca algo?

¿Puede una máquina de estados finitos ser universal?

¿Cuál es el proceso de traducción de un lenguaje de programación para representar números o bits?

Términos de Layman: ¿Qué es un filtro Bloom?

¿Cómo resuelve la programación dinámica las decisiones óptimas de asignación de activos?

X resuelve el problema de la Torre de Hanoi, primero con n discos en el tiempo t1 y luego con n + 2 discos en el tiempo t2. Suponiendo que él toma la misma cantidad de tiempo para cada movimiento de disco y resuelve el problema en los menores pasos posibles, ¿cuál será la relación entre t1 y t2?

¿Cuál es la forma de demostrar que el límite inferior del par más cercano es n log n utilizando Element Uniqueness?

¿Qué pasaría si pudiéramos demostrar que AGI está más allá del poder computacional de la máquina Turing?

Tengo los datos de todos mis productos (altura-ancho-longitud) pero quiero encontrar el número óptimo de cajas N y el tamaño de cada N cajas (medidas como HWL). ¿Cómo puedo hacerlo?

¿De qué se trata más la computación cuántica: Computadoras o Física y Matemáticas?