Hash mínimo perfeito para combinações matemáticas
Primeiro, defina dois inteirosN
eK
, OndeN >= K
, ambos conhecidos em tempo de compilação. Por exemplo:N = 8
eK = 3
.
Em seguida, defina um conjunto de inteiros[0, N)
(ou[1, N]
se isso torna a resposta mais simples) e chamá-loS
. Por exemplo:{0, 1, 2, 3, 4, 5, 6, 7}
O número de subconjuntos deS
comK
elementos é dado pela fórmulaC(N, K)
. Exemplo
Meu problema é o seguinte: Crie um hash mínimo perfeito para esses subconjuntos. O tamanho da tabela de hash de exemplo seráC(8, 3)
ou56
.
Eu não me importo com pedidos, apenas que haja 56 entradas na tabela de hash, e que eu possa determinar o hash rapidamente a partir de um conjunto deK
inteiros. Eu também não me importo com a reversibilidade.
Exemplo de hash:hash({5, 2, 3}) = 42
. (O número 42 não é importante, pelo menos não aqui)
Existe um algoritmo genérico para isso que funcionará com quaisquer valores deN
eK
? Não consegui encontrar um pesquisando o Google ou meus próprios esforços ingênuos.