ELFHash 算法python改写和拓展
2021/7/5 14:08:24
本文主要是介绍ELFHash 算法python改写和拓展,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
ELFHash 算法python改写和拓展
最近项目上需要应用到字符串判断重复的功能,根据之前的经验可以通过hash的方式来进行。当然也有人会说,你既然是用python,为什么不能直接用字典数据类型的键名来处理呢。这里可能会用的非常大的数据量,所以需要通过hashmap的方式来达到O(1)的效率。
经过CSDN上翻阅大量的技术文章,发现很多推荐ELFHash算法的,列举了各项优点。但是发现基本上都是C版本,或者JAVA版本的代码。所以需要自己改写成python版本:
def ELFhash(strings): hash=0 x=0 str_len=len(strings) # print(str_len) for i in range(str_len): hash=(hash<<4)+ord(strings[i]) #hash左移4位,把当前字符ASCII存入hash低四位 #支持中文字符的URL x=hash&0xF000000000000000 #如果最高的四位不为0,则说明字符多余7个,现在正在存第7个字符, #如果不处理,再加下一个字符时,第一个字符会被移出,因此要有如下处理。 #该处理,如果最高位为0,就会仅仅影响5-8位,否则会影响5-31位,因为C语言使用的算数移位 #因为1-4位刚刚存储了新加入到字符,所以不能>>28 if x: hash^=(x>>56) #下面这行代码并不会对X有影响,本身X和hash的高4位相同, #下面这行代码&~即对28-31(高4位)位清零。 hash&=~x # return (hash&0x7FFFFFFF) return hash
在原C版本上,做了如下的参数修改:
1,0xF0000000 -> 0xF000000000000000;
2,hash^=(x>>24) -> x>>56;
这样输出的hash就从原来的32位拓宽到了64位,但是这样的修改,不确定对于原来的算法的均匀性会产生多大的影响。希望有大神能够帮忙做一些验证哈。。。
参考文章如下:
https://blog.csdn.net/liangzhaoyang1/article/details/51377996
https://blog.csdn.net/ltyqljhwcm/article/details/52966874
这篇关于ELFHash 算法python改写和拓展的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-08有遇到过吗?同样的规则 Excel 中 比Python 结果大
- 2024-03-30开始python成长之路
- 2024-03-29python optparse
- 2024-03-29python map 函数
- 2024-03-20invalid format specifier python
- 2024-03-18pool.map python
- 2024-03-18threads in python
- 2024-03-14python Ai 应用开发基础训练,字符串,字典,文件
- 2024-03-13id3 algorithm python
- 2024-03-13sum array elements python