2012-05-29 12 views
11

Szukam funkcji szybkiego mieszania o dobrej (tj. Prawie równomiernej) dystrybucji do użycia w implementacji tabeli mieszania.Algorytm mieszania dla implementacji tabeli mieszania

Tablica haszów będzie używana wyłącznie do przechowywania wartości za pomocą klawisza liczby całkowitej.

Czy mogę użyć mniejszych bitów liczby całkowitej jako skrótu?

np. Int key = n & 15; i stworzyć tablicę z 16 slotami do ich przechowywania.

Jakieś rekomendacje?

+12

Nie ma czegoś takiego jak idealna funkcja skrótu. Jeśli jednak potrzebujesz pewnych algorytmów z odpowiednim kodem źródłowym, zobacz tutaj: http://partow.net/programming/hashfunctions/index.html –

+0

Podejmowanie najniższych bitów jest prawdopodobnie najgorszą rzeczą do zrobienia. (ale: wszystko zależy od zakresu wartości, których można się spodziewać w kluczu int) Spróbuj również wymieszać górne bity lub pomnóż z dużą liczbą (nieparzysta, pierwsza). Wiedz, czego się spodziewać i zmierzyć. – wildplasser

+0

Dodaj komentarz jako odpowiedź, a ja to zaakceptuję. –

Odpowiedz

3

Widać tutaj xxhash

Twój wspomniano funkcja skrótu jest bardzo szybki, ale jest też bardzo źle. Jeśli chcesz mieć "głupią" funkcję skrótu, możesz wziąć pod uwagę moduł.

przykład:

int key = item % size_of_hash_table 
+2

Dlaczego "to" jest złe? –

Powiązane problemy