Nie mogę użyć boost: hash, ponieważ muszę trzymać się C i nie mogę używać C++.Minimalna funkcja skrótu dla C?
Ale potrzebuję dużej liczby (od 10K do 100k) znaków tokenów (długość od 5 do 40 bajtów), aby wyszukiwanie w nich było najszybsze.
MD5, SHA1 lub jakakolwiek długa funkcja hash wydaje się zbyt ciężka dla prostego zadania, nie robię kryptografii. Plus jest koszt przechowywania i przetwarzania.
Stąd moje pytanie:
Co może być najprostszy algorytm mieszania, która zapewni zapobiegania kolizji w większości praktycznych przypadków.
Ile bitów użyć do wartości mieszania? Pracuję dla systemów 32-bitowych. Czy algorytm mieszania w Perlu/Pythonie również używa 32-bitowych skrótów? Czy muszę przeskoczyć do 64?
Jeśli chodzi o implementację tabel mieszania w popularnych językach skryptowych: czy sprawdzanie implementacji powoduje kolizje, czy mogę omijać tę część w ogóle?
Poniższa strona ma kilka implementacje funkcji mieszających ogólnego zastosowania realizowanych w C (i wielu innych językach): http://partow.net/ programowanie/hashfunctions/index.html –
Czy rozważałeś zastosowanie GLib? https://developer.gnome.org/glib/2.46/glib-Hash-Tables.html –