Perfecto hash mínimo para combinaciones matemáticas.

Primero, define dos enteros.N yK, dóndeN >= K, ambos conocidos en tiempo de compilación. Por ejemplo:N = 8 yK = 3.

A continuación, define un conjunto de enteros.[0, N) (o[1, N] Si eso hace que la respuesta sea más simple) y llámala.S. Por ejemplo:{0, 1, 2, 3, 4, 5, 6, 7}

El número de subconjuntos deS conK Los elementos están dados por la fórmula.C(N, K). Ejemplo

Mi problema es este: crea un hash mínimo perfecto para esos subconjuntos. El tamaño de la tabla hash de ejemplo seráC(8, 3) o56.

No me importa el ordenamiento, solo que haya 56 entradas en la tabla hash y que puedo determinar el hash rápidamente de un conjunto deK enteros Tampoco me importa la reversibilidad.

Ejemplo hash:hash({5, 2, 3}) = 42. (El número 42 no es importante, al menos no aquí)

¿Hay un algoritmo genérico para esto que funcione con cualquier valor deN yK? No pude encontrar uno buscando en Google, o mis propios esfuerzos ingenuos.

Respuestas a la pregunta(2)

Su respuesta a la pregunta