У меня есть хеш-таблица, ключи которой имеют 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 );
}
Было бы интересно иметь хэш32 (x) эквивалентный 64-битному.