算法 - 字符串匹配 - Rabin-Karp算法

Rabin-Karp算法介绍Rabin-Karp字符串匹配算法与朴素字符串匹配算法类似,都要比较每一个字符串,不同的是Rabin-Karp算法对字符串做预处理,将字符转换为进制数并取模。预处理时间O(m), 匹配时间是O((n - m + 1) m),m是匹配字符串长度,n是目标字符串长度。RaBin-Karp算法:假设待匹配字符串的长度为M,目标字符串的长度为N(N>=M)...
摘要由CSDN通过智能技术生成

Rabin-Karp算法

介绍

Rabin-Karp字符串匹配算法与朴素字符串匹配算法类似,都要比较每一个字符串,不同的是Rabin-Karp算法对字符串做预处理,将字符转换为进制数并取模。预处理时间O(m), 匹配时间是O((n - m + 1) m),m是匹配字符串长度,n是目标字符串长度。

RaBin-Karp算法:

  1. 假设待匹配字符串的长度为M,目标字符串的长度为N(N>=M);
  2. 首先计算待匹配字符串的hash值,计算目标字符串前M个字符的hash值;
  3. 比较前面计算的两个hash值,比较次数N-M+1:

1.若hash值不相等,则继续计算目标字符串的下一个长度为M的字符子串的hash值

2.若hash值相同,则需要使用朴素算法再次判断是否为相同的字串;

伪代码:

RABIN_KARP_MATCHER(T, P, d, q)    //  输入 文本T,模式P,使用进制d,素数q
    n = T.length
    m = P.length
    h = d^(m - 1) mod q
    p = 0
    t = 0
    for i = 1 to m                // preprocessing
        p = (d * p + P[i]) mod q
        t = (d * t + T[
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值