Хеш-таблица с 64-битными значениями в качестве ключа

У меня есть хэш таблица, ключи которой представляют собой 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).

6
задан MetallicPriest 4 August 2011 в 15:15
поделиться