CityHash在python上可以直接导入模块使用。https://pypi.org/project/cityhash/但是可能仅支持Linux系统,不支持Windows系统(反正本菜鸡在瘟十上面各种报错提示要修改XX文件)...
CityHash算法由Google公司于2013年公布,是个略久远的算法了~
CityHash 的主要优点是大部分步骤包含了至少两步独立的数学运算。现代 CPU 通常能从这种代码获得最佳性能。但 CityHash 也有其缺点:代码较同类流行算法复杂。
人家当时对这个字符串哈希算法的要求是:
- quick and dirty(dirty???我没太理解)
- suitable for a library
- suitable for fingerprinting(对于要生成指纹的童鞋来说是个很友好的算法!)
- secure
本着比Murmurhash2更高(质量)更快的要求,他们创造了CityHash。
CityHash64的整体框架是:
if (N <= 32)
if (N <= 16)
if (N <= 8)
...
else
...
else
...
else if (N <= 64) {
// Handle 33 <= N <= 64
...
} else {
// Handle N > 64
int iters = ⌊N/64⌋
...
}
预处理:
k0,k1,k2是2^64附近的素数,并且K=k2+2N
当1≤N≤3时:
当4≤N≤8时:
当9≤N≤16时:
当17≤N≤32时:
当33≤N≤64时:
感兴趣的可以去瞅瞅源码https://github.com/google/cityhash