RK算法
通过对主串中 n-m+1 个子串分别求hash值,然后逐个与模式串的哈希值比较大小。 在对主串构建的时候,就对比是不是一样的,一样就不继续计算后面的hash值。
一种简单的hash算法,a~z这26个英文字母,对应的数字相加,得到的和作为hash值,为了解决hash碰撞的问题在,哈希值相等的时候,再对比一下子串和模式串本身。
字符集范围不要太长且模式串不要太长,否则hash值可能冲突,O(n)
Java代码
1 | package com.ludepeng.datastruct.base.datastruct.charMath.simple.rk; |
1 | package com.ludepeng.datastruct.base.datastruct.charMath.simple.rk; |
Java代码 – 复杂的hash
1 | package com.ludepeng.datastruct.base.datastruct.charMath.simple.rk; |