之前的学习了Hash表的基础知识(数据结构与算法(Hash表)), 知道了Hash表的核心就是Hash函数,今天来学习完美hash函数。
一、什么是完美hash函数?
如果存在函数h(x)将集合U映射到集合S并且没有碰撞, 我们就可以说h(x)是集合U到集合S的完美hash函数。
二、如何实现一个完美hash函数
实现的思路不复杂, 但是有一个前提:在构建hash表之前, 我们要先获得所有可能的key。然用之前的方法(好像有些地方叫除留余数法)进行hash分组, 然后用同样的方法将落在不同槽的数据再做一次映射, 确保这次映射不再有碰撞。
三、c++代码实例实现完美hash函数
class Hash {
public:
Hash(std::list<int> keys)
:size_(keys.size())
,region_sizes(keys.size())
,offset_table(keys.size())
,a2_array(keys.size()){
// 一级hash
int sum = 10 * size_;
int max_sum = 5 * size_;
while (sum > max_sum