Мне нужна функция хэша, которая настолько эффективна, насколько это возможно, для хэш-таблицы (фактически хэш-набора), которая использует зондирование (открытую адресацию) для разрешения конфликтов. Записями, хранящимися в таблице, являются все 4 байтовые int, которые принимают случайные значения в диапазоне.Является ли mod prime достаточно хорошим как хеш-функция для хэш-таблицы в C
Я рассматриваю что-то даже быстрее, чем djb2, что-то вроде
value mod LARGE_PRIME
Тогда мод снова с моим размером ковша. Я предполагаю, что это простое число больше, чем размер моего ведра, а это значит, что у меня также есть какой-то уровень здравомыслия в отношении того, насколько большой мой стол должен расти (он, вероятно, никогда не получит 256 записей).
Мне не нужны криптографические аспекты хеш-функции - до тех пор, пока она не ужасно подвержена столкновениям, она должна работать нормально.
Будет ли это делать хэш-функцию? Могу ли я определить конкретный алгоритм для моей емкости хэш-таблицы каждый раз, когда я изменяю размер, чтобы улучшить его?
Что вы подразумеваете под 'LARGE_PRIME'? 'value mod LARGE_PRIME' является' значением' для всех значений, меньших, чем 'LARGE_PRIME'. –
Хороший вопрос. Я считаю, что моя таблица не должна превышать 256 записей, поэтому я предполагаю, что примерно 1000. Вопрос отредактирован. –
«принимать на случайные значения» - это «случайный» означает, что вам не нужны хэширование или простые числа, и ваш «как можно более эффективный» может быть или не быть достаточно строгим, чтобы вы могли заботиться, а просто побитовое - и может маскировать более крупное случайное значение в счетчике 2-го уровня мощности более эффективно, чем операция мод (когда количество ведра неизвестно до времени выполнения). –