哈希表(字符串哈希)

如何求字符串哈希?

举例子:求字符串"ABCD"的哈希值,"ABCD"字符串看成是P进制的(1234)p,其对应的十进制数就是1*p^3+2*p^2+3*p^1+4*p^0,这样就可以把一个字符串转化为一个数字。但是这个数字可能比较大不好存储,所以要对这个数字模一个比较小的数Q,通过取模就可以把这个数即这个字符串映射到0~Q-1之间的一个数。

注意:

1.不能把字母映射成0。例如:A如果映射成0, A (0)p=0,AA (00)p=0 不对

2.减少哈希冲突:经验值p=131或13331,Q=2^64 这种情况基本不会发生哈希冲突

字符串前缀哈希:

用一个数组h[]存储字符串前缀的哈希值。例如:"ABCDEFG" ,h[0]=0,h[1]="A"的哈希值,h[2]="AB"的哈希值,h[3]="ABC"的哈希值······

前缀哈希计算任意一个子串的哈希值公式:

已知h[l-1]和h[r],计算l~r段的哈希值:h[r]-h[l-1]*p^(r-l+1)

题目:

你可能感兴趣的:(数据结构,散列表,哈希算法,算法,c++,数据结构)