Я ищу хеш-функцию, которая разбивает большой набор входных данных с хорошей однородностью на небольшое количество секций (скажем, 100 или 256).Это означает, что я ожидаю много коллизий, и мне плевать на коллизии.
Входные данные заранее неизвестны.Я ожидаю строки длиной от 6 до 100 байт.Строки могут быть очень плохо распределены (например, большая часть заполнена пробелами или содержит только цифры).
Алгоритмы CRC - одна из первых идей, которая приходит на ум. CRC8 было предложено, но без предоставления информации о его однородности;для CRC32, по-видимому, однородность не так уж хороша .
Существуют списки простых или универсальных хеш-функций, но без указания ихединообразие.
У Боба Дженкинса есть полная статья о хеш-функциях, которые возвращают 32-битное значение.Я предполагаю, что для равномерно распределенного 32-битного значения все возможные 8-битные подмножества должны быть равномерно распределены, поэтому есть хорошие кандидаты.Но может быть стоит уменьшить 32-битное значение до 8-битного, если есть более простые алгоритмы для 8-битного кода?