Idealny minimalny skrót dla kombinacji matematycznych
Najpierw zdefiniuj dwie liczby całkowiteN
iK
, gdzieN >= K
, obie znane w czasie kompilacji. Na przykład:N = 8
iK = 3
.
Następnie zdefiniuj zestaw liczb całkowitych[0, N)
(lub[1, N]
jeśli to ułatwi odpowiedź) i nazwij toS
. Na przykład:{0, 1, 2, 3, 4, 5, 6, 7}
Liczba podzbiorówS
zK
elementy podane są za pomocą wzoruC(N, K)
. Przykład
Moim problemem jest: Stwórz idealny minimalny skrót dla tych podzbiorów. Będzie to rozmiar przykładowej tabeli mieszaniaC(8, 3)
lub56
.
Nie obchodzi mnie porządkowanie, tylko, że w tablicy mieszającej jest 56 wpisów, i że mogę szybko określić hash z zestawuK
liczby całkowite. Nie dbam też o odwracalność.
Przykładowy skrót:hash({5, 2, 3}) = 42
. (Liczba 42 nie jest ważna, przynajmniej nie tutaj)
Czy istnieje ogólny algorytm, który będzie działał z dowolnymi wartościamiN
iK
? Nie udało mi się znaleźć takiego, przeszukując Google, ani własnych naiwnych wysiłków.