Estou curioso para saber se existe uma maneira de armazenar um hash de um conjunto múltiplo de números inteiros que possua as seguintes propriedades, idealmente:
- Utiliza espaço O (1)
- Pode ser atualizado para refletir uma inserção ou exclusão no tempo O (1)
- Duas coleções idênticas (ou seja, coleções que possuem os mesmos elementos com as mesmas multiplicidades) devem sempre hash para o mesmo valor e duas coleções distintas devem hash para valores diferentes com alta probabilidade (ou seja, a função é independente ou independente em pares)
Uma tentativa inicial seria armazenar o módulo do produto como um primo aleatório dos hashes dos elementos individuais. Isso satisfaz 1 e 2, mas não está claro se, ou uma variação aproximada, satisfaria 3.
Originalmente, eu postei isso no StackOverflow .
* As propriedades 1 e 2 podem ser relaxadas um pouco para, digamos, O (log n) ou um pequeno polinômio sublinear. O objetivo é ver se podemos identificar vários conjuntos e testar de forma confiável a igualdade sem armazenar os próprios elementos.