哈希加快查找的原理
将字符串的key,转成整数,使用整数找到对应的value
Hash算法将字符串转成整数,同样的Hash值得 key:value会放到一个集合里面,由于Hash能使得不同的字符串尽量有不同的整数值
将海量的数据,按照HASH值分成不同的集合,先找集合,再找key–>value,大大提高效率
或者说
通过获得你要排序的序列长度(m),
然后得出比这个 m 大的素数作为数组的长度(n),
然后对接下来的输入数据(D)进行取模运算(v=D%n),
然后取模之后的数据存到数组中。
字符串哈希
自然溢出法
这种方法是利用数据结构unsigned long long的范围自然溢出:即当存储的数据大于unsigned long long的存储范围时,会自动mod 264−1,就不用mod其他质数来保证唯一性了。
Hash公式
unsigned long long Hash[n]
hash[i]=hash[i−1]∗p+idx(s[i]);
注意:这里的p一定要是个质数
单Hash法
相当于自然溢出法没有了自动取模的操作,所以需要自己进行取模操作。但是这种Hash方法在模数较小的时候的稳定性不一定得到保证,所以在这个方面不如其他方法。
Hash公式
hash[i]=(hash[i−1])∗p+idx(s[i])%mod;
注意:这里的p和mod都是质数,且满足p<mod。最好在选取的时候把p和mod的值取大一点。
举例
如取p=13,mod=101,对字符串abc进行Hash
hash[0]=1;
hash[1]=(hash[0] × 13 + 2)%101=15;
hash[2]=(hash[1] × 13 + 3)%101=97;
所以最终字符串abc的hash值就是97
Hash方法
hash1[i]=(hash1[i−1])∗p+idx(s[i]) % mod1
hash2[i]=(hash2[i−1])∗p+idx(s[i]) % mod2