哈希函数(Hash)函数的设计
# 前言
为了程序的高效运行,合理的Hash函数设计至关重要
# Subdiffusions
常用的方法有很多,例如bitwise subdiffusions
其中,代表的二进制排列
dependent bitwise subdiffusions
linear subdiffusions
arithmetic subdiffusions
# Diffusions
通过多个Subdiffusions的组合,可以得到一个比较好的Diffusions。
但仍需要注意的是,得到的Diffusions应当对为0的输入有反应:例如,对集合与集合分别哈希,得到的hash值应当不同
# 常用算法
# FNV-1a
# 32位
hash = 2166136261
mod = pow(2, 31)
for value in values:
hash = hash ^ value
hash = hash * 16777619 % mod
# 64位
hash = 14695981039346656037
mod = pow(2, 63)
for value in values:
hash = hash ^ value
hash = hash * 1099511628211 % mod
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 参考
http://ticki.github.io/blog/designing-a-good-non-cryptographic-hash-function/
上次更新: 2021/02/24, 03:37:30