所谓字符串哈希,即对一个字符串形成单向加密的过程,使其拥有尽可能独一无二的编号,通过这种低概率的编号重复,使得字符串的匹配尽可能高效。- [( K( k: T+ F
如何字符串哈希
最普遍的字符串哈希方式,即进制哈希。核心是将字符串上的每一个字符理解为一个数字,然后固定一个进制,将该字符串转化成一个该进制下的的数,作为其哈希值,然后通过比对哈希值,判断两个字符串是否相等。* j; W, O3 ] ]/ ?+ Z
ll Hash(char s[])3 K1 ]; U" V4 L6 S ?$ Y
{2 @1 j' i" [& S
int len = strlen(s);1 ?5 Z4 b, i' n8 S+ }; n
ll ans = 0;
for (int i = 0; i 2 u2 H4 h x$ }, R
而对于再好的哈希,也不可避免会产生冲突,此时可以通过一些方法来尽可能降低哈希冲突。
1.无错哈希) g, v! Y: j/ @: R1 p5 X
原理就是当一个字符串得到一个哈希值后,判定该哈希值是否已经使用过,如果使用的话就不断加上一个大质数,使得不产生冲突。该方式的缺陷在于会十分消耗空间。% Z! L9 q! r- f) N- Q/ ^
2.多重哈希! X3 _: J( G: p% S7 X. Q6 |
给定不唯一的哈希函数,对每一个字符串生成多个哈希值,由此来判断两个字符串是否相等。该方法会增加空间和时间,但也提高了正确性。
成为第一个吐槽的人