Tengo curiosidad por saber si hay una manera de almacenar un hash de un conjunto múltiple de enteros que tenga las siguientes propiedades, idealmente:
- Utiliza el espacio O (1)
- Se puede actualizar para reflejar una inserción o eliminación en tiempo O (1)
- Dos colecciones idénticas (es decir, colecciones que tienen los mismos elementos con las mismas multiplicidades) siempre deben tener el mismo valor, y dos colecciones distintas deben tener valores diferentes con alta probabilidad (es decir, la función es independiente o independiente por pares)
Un intento inicial de esto sería almacenar el módulo del producto como un primo aleatorio de los valores hash de los elementos individuales. Esto satisface 1 y 2, pero no está claro si, o una variación cercana, satisfaría 3.
Originalmente publiqué esto en StackOverflow .
* Las propiedades 1 y 2 se pueden relajar un poco, por ejemplo, O (log n), o un pequeño polinomio sublineal. El punto es ver si podemos identificar conjuntos múltiples y probar de manera confiable la igualdad sin almacenar los elementos en sí.