Estoy buscando una función hash sobre los conjuntos H (.) Y una relación R (.,.) Tal que si A está incluida en B, entonces R (H (A), H (B)). Por supuesto, R (.,.) Debe ser fácil de verificar (tiempo constante) y H (A) debe calcularse en tiempo lineal.
Un ejemplo de H y R es:
- , donde k es un entero fijo y h (x) una función hash sobre enteros.
- R (H (A), H (B)) = ((H (A) y H (B)) == H (A))
¿Hay otros buenos ejemplos? (bueno es difícil de definir pero intuitivamente si R (H (A), H (B)) entonces whp A está incluido en B).
Edición posterior :
- Estoy buscando una familia de funciones hash. Tengo muchos juegos; 3 - 8 elementos en cada conjunto; El 90% de ellos tienen 3 o 4 elementos. El ejemplo de función hash que proporcioné no está muy bien distribuido para este caso.
- El número de bits de H (.) (En mi ejemplo, k) que debe ser pequeño (es decir, H (.) Debe caber en un entero o largo).
- Una buena propiedad de R es que si H (.) Tiene k bits, entonces R (.,.) Es verdadero para (3 ^ k - 2 ^ k) / 4 ^ k pares, es decir. por muy pocos pares.
- Los filtros Bloom son especialmente buenos para conjuntos grandes. Intenté usar BF para este problema, pero los resultados óptimos fueron con una sola función.
(crosspost de stackoverflow , no recibí una respuesta lo suficientemente buena)
ds.algorithms
hash-function
Alexandru
fuente
fuente
Respuestas:
(Esta respuesta estaba originalmente en los comentarios, pero la estoy moviendo a otra respuesta por sugerencia de Suresh).
fuente
fuente