Perfekter minimaler Hash für mathematische Kombinationen
Definieren Sie zunächst zwei GanzzahlenN
undK
, woherN >= K
, beide zum Zeitpunkt der Kompilierung bekannt. Zum Beispiel:N = 8
undK = 3
.
Definieren Sie als Nächstes eine Reihe von Ganzzahlen[0, N)
(oder[1, N]
wenn das die Antwort einfacher macht) und nenne esS
. Zum Beispiel:{0, 1, 2, 3, 4, 5, 6, 7}
Die Anzahl der Teilmengen vonS
mitK
Elemente wird durch die Formel gegebenC(N, K)
. Beispiel
Mein Problem ist folgendes: Erstellen Sie einen perfekten minimalen Hash für diese Teilmengen. Die Größe der Beispiel-Hash-Tabelle beträgtC(8, 3)
oder56
.
Ich kümmere mich nicht um die Bestellung, nur dass die Hash-Tabelle 56 Einträge enthält und ich den Hash schnell aus einer Reihe von ermitteln kannK
ganze Zahlen. Reversibilität ist mir auch egal.
Beispiel Hash:hash({5, 2, 3}) = 42
. (Die Nummer 42 ist nicht wichtig, zumindest nicht hier)
Gibt es einen generischen Algorithmus, der mit allen Werten vonN
undK
? Ich konnte keine finden, indem ich Google durchsuchte, oder meine eigenen naiven Bemühungen.