2021-05-23

Posted 雪靡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-05-23相关的知识,希望对你有一定的参考价值。

暴雪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的冲突不高。

具体代码

最近太忙了,有空实现。

以上是关于2021-05-23的主要内容,如果未能解决你的问题,请参考以下文章

2021 05/23 words

《安富莱嵌入式周报》第213期:2021.05.17--2021.05.23

2021-05-23

2021-05-23

2021-05-23

2021-05-23