字符串匹配算法( BF 和 RK )

BF算法(Brute Force)- 暴力匹配算法

先了解两个概念,主串和模式串,比如在字符串 A 中查找字符串 B,那么 A 就是主串,长度是 n,B 就是模式串,长度是 m。

在匹配的过程中,假设 n = 10,m = 3,将主串拆分成【012、123、234、345、456、567、678、789】这些子串,然后将模式串分别和以上子串逐个对比,每次对比 3 个字符,一共对比 8 次(8个子串),也就是说,每次对比 m 个字符,一共对比 n - m + 1 次,所以这种算法的最坏时间复杂度是 O(n*m)。

尽管BF的时间复杂度很高,但是在实际的软件开发中,也比较常用,因为模式串和主串的长度都不会太长,而且每次模式串与主串中的子串匹配的时候,当中途遇到不能匹配的字符的时候,就可以停止了,不需要把 m 个字符都对比一下。所以BF算法适合处理小规模的字符串匹配。

RK算法(Rabin-Karp)

RK算法是BF算法的升级,还是原来的例子,我们将分成的 8 个子串分别求哈希值,对模式串也求出哈希值,然后将模式串的哈希值分别和子串的哈希值比较,如果相等,那么就说明对应的子串和模式串匹配了。因为哈希值是一个数字,数字之间比较是否相等是非常快速的。所以模式串的子串比较的效率就提高了。

RK算法的效率依赖于哈希算法的设计,如何冲突较少,也就减少了模式串和子串的比较次数,冲突较多,时间复杂度就有可能退化到O(n*m)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值