字符串搜索之BMH 算法(伪代码)

  天哪,算法复杂度越来越低了,连线性的都不用了!!O(n-m)!!从后往前扫的功效!!(要匹配的字符)

  逆简单算法
• 如果从P的后面开始搜索?
– Boyer and Moore
Reverse-Naive-Search(T,P)
01 for s <- 0 to n – m
02 j <- m – 1 // start from the end
03 // check if T[s..s+m–1] = P[0..m–1]
04 while T[s+j] = P[j] do
05     j <- j - 1
06     if j < 0 return s
07 return –1
 运行时间和简单算法相同


偏移表
• 在预处理中, 计算大小为|S|的偏移表.
• 例: P = “kettle”
– shift[e] =4, shift[l] =1, shift[t] =2, shift[k] =5
• 例: P = “pappar”
– 其偏移表是什么?


Boyer-Moore-Horspool  算法
BMH-Search(T,P)
01 // compute the shift table for P
01 for c <- 0 to |S|- 1
02 shift[c] = m // default values
03 for k <- 0 to m - 2
04 shift[P[k]] = m – 1 - k
05 // search
06 s <- 0
07 while s  <- n – m do
08 j <- m – 1 // start from the end
09 // check if T[s..s+m–1] = P[0..m–1]
10 while T[s+j] = P[j] do
11 j <- j - 1
12 if j < 0 return s
13 s <- s + shift[T[s + m–1]] // shift by last letter
14 return –1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值