暴雪Hash算法

暴雪HASH算法(转) - 老司机 - 博客园 http://cache.baiducontent.com/c?m=T273QdI5nY3pxi9_wXnxt7Hgon_EJ_WXBfTsV8lwGfrAic55uqfeFcjAMPklz4RWbMowVPd8jr-W8qtvXFSFPW9a6uuQCMj2coEVXrRgJ-1Tf17jBisx7xw_pdJjbJsH_8cq-pfbTElXgfKuKf_OTDWWzsC4Ub7AjaehWSO3pE4zqWMfmgJC4-_YXK5D-VQT&p=98769a47848a08b408e29e784449&newp=c4769a4789960aef13bd9b740b4f92695803ed6039d7d301298ffe0cc4241a1a1a3aecbf2c261302d3c37a6d05aa4d5dedfb3777370834f1f689df08d2ecce7e70dd6c743b

其实3个都有碰撞到的概率如果极其低下的话,为何不用3个拿来查找?只要保证查到的那个和结构体包含的俩个与算出的3个hash存在一定顺序相等。
但是这个方法会存在误判。不知道数据规模多大才会造成误判。

改进:

结构体中存在一个bExists的bool类型(1字节)。可以取其2个高位。00表示HashA HashB;01表示HashB Hash;10表示HashA Hash;11用于后5位。后5位表示下一个位置,如果前2位不为11,范围为1~31(0表示不存在),否则范围为32~63,如果为FFFFF则表示超过63个。最低位为原先的Exists。

此外结构体这样定义

typedef struct _HASHTABLE
{ 
	long nHashA; 
	long nHashB; 
	bool bExists; 
}HASHTABLE, *PHASHTABLE ;

会造成占用空间为12字节。long在这里使用4字节,long + long + bool一共占用9字节,编译器填充3字节,浪费内存。

其他方法:

暴雪hash算法,(不理解?稍作改进?)_wejoncy的专栏-CSDN博客_暴雪公司hash的改进 https://blog.csdn.net/wejoncy/article/details/51280779

这个方法我感觉会很浪费内存。因为空间大小取值正常情况下hash的冲突不高。

具体代码

最近太忙了,有空实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值