字符串哈希

53 阅读1分钟

p进制

idea

将一个字符串映射成一个p进制的数值,最后模Q,为了减少冲突p=131或1331,Q=264,为此我们一般将哈希值用unsigned long long类型存储

e.g

若将A,B,C,D分别映射成为1,2,3,4 ABCD=(1234)131=1 ×\times 1313+2 ×\times 1312+3 ×\times 1311 +4 ×\times 1310

Warning

  • 不能将某个数映射成0(e.g:若A=0,AA=0,非常容易冲突)

用h[N]表示长度为N的字符串前缀的哈希值,已知h[L],h[R],求L~R这一段的哈希值

屏幕截图_20230226_151310.png

h[L-1]需要乘上pR-L+1才能让低位和h[R]对齐,h[L~R]=h[R]-h[L-1]×\times pR-L+1