У меня есть хэш таблица, ключи которой представляют собой 64-битные значения. Размер таблицы может иметь разную длину степени 2, например 2, 4, 8 и т. Д. Мне нужна функция хэш-таблицы, которая хорошо работает для таких случаев, то есть имеет минимальное количество коллизий. В качестве примера: если мне нужен размер таблицы 32, хеш-функция должна выдавать значения от 0 до 31 с минимальным количеством конфликтов для 64-битных входов.
Я нашел хорошие решения для 32-битных входов, но пока ни одного для 64-битных входов. .
Для 32-битных ключей я использую эту функцию
#define hash32(x) ( (x) * 2654435761 )
unsigned int getHashKey( unsigned long x )
{
return hash32(x) >> ( 32 - h_bits );
}
Было бы интересно получить 64-битный эквивалент hash32 (x).