算法导论-字符串匹配-刘凯宇分析.pptxVIP

  • 4
  • 0
  • 约3.06千字
  • 约 28页
  • 2016-08-05 发布于湖北
  • 举报
字符串匹配 2015.3.22 刘凯宇 大 纲 字符串匹配问题定义 朴素算法 Rabin-Karp算法 有限自动机算法 KMP算法 2 问题定义 文本 T[1…n] 长度 n 模式 P[1…m] 长度 m m≤n 字母集 Σ={0,1} Σ={a,b,…,z} 0≤s≤n-m, T[s+1..s+m] = P[1..m] 模式P在文本T中出现,偏移为s。 3 字符串匹配算法 朴素算法 Rabin-Karp算法 有限自动机算法 KMP算法 4 朴素算法 模式 P[1..m] 0≤s≤n-m, T[s+1..s+m] = P[1..m] 思想: P[1..m] T[1..n] 文本 T[1..n] s=0 s=1 … s=n-m … 5 ? 文本 T = ababcabcacbab 模式 P = abcac s = 0 s = 1 s = 2 s =3 s =4 s =5 T(n) = O((n-m+1)m) 6 7 字符串匹配算法 朴素算法 Rabin-Karp算法 有限自动机算法 KMP算法 7 Rabin-Karp算法 字符串31415 Σ = {0,1,2…9} 十进制数 31415 数值ts 模式 P[1..m] 思想: 文本子串 T[s+1..s+m] 数值p 0≤s≤n-m 有效偏移为s T[s+1..s+m] = P[1..m] 8 文本 T = 258569236589780 p = 2365 ttt︸ 模式 P = 2365 t0 =2585 ︸ t1 =5856 … ︸ t6 =2365 模式P 数值p ? T[s+1..s+m] 数值ts ? 数值ts+1 ? Σ = {0,1,2…9} 9 运用霍纳法则 ts+1= d(ts - dm-1T[s+1]) + T[s+m+1] d = |Σ| p = P[m] + d( P[m-1] + d( P[m-2] +…+ d(P[2] + dP[1])…)) t0 = T[m] + d(T[m-1] + d(T[m-2] +…+ d(T[2] + dT[1])…)) p = 5+10*(6+10*(3+10*2))=2365 t0=5+10*(8+10(5+10*2))=2585 Σ ={0,1,2…,9} d = 10 t1= 10(t0-103*2)+6 =5856 t2= 10(t1-103*5)+9 =8569 … t6= 10(t5-103*9)+5 =2365 … … 预处理时间 O(m) 10 = P[m] + d P[m-1] + d2P[m-2] + … + dm-2P[2] + dm-1 P[1] p≡p%q ts ≡ ts%q 问题:p和ts的值可能太大 方法:p和ts的值取模q ts+1 = ( d(ts-T[s+1]h)+T[s+m+1] )%q h= dm-1 % q 11 for i=1 to m p = (dp+P[i])%q 取模运算性质 (a + b)%c=(a%c+b%c)%c (ab)%c=(a%c)(b%c)%c ts+1={d(ts - dm-1T[s+1]) + T[s+m+1] }%q =( d(ts-T[s+1]h)+T[s+m+1] )%q (dm-1%q) ={ (d%q)[ (ts%q - (T[s+1]%q)%q)%q]%q + T[s+m+1]%q }%q 12 若ts≠p T[s+1..s+m]与模式P不匹配,偏移s无效 若ts=p P与T成功匹配 s为有效偏移 T[s+1..s+m] = P[1..m] T[s+1..s+m] ≠ P[1..m] P与T不匹配 s为伪命中点 q=13 ts+1= ((31415-3*10000)*10+2)%13 = ((7-3*3)*10+2)%13 = 8 ts = 31415%13 = 7 文本T=2359023141526739921 p=31415%13 = 7 模式P=31415 8 9 3 11 0 1 7 8 4 5 10 11 7 9 11 … … … 伪命中点 合法匹配 匹配时间T(n)=O((n-m+1)m) 实际应用有效偏移少 T(n)=O(n-m+1+cm)=O(n+m) ts+1 = (d(ts-T[s+1]h)+T[s+m+1])%q t0 =23590%13=8 13 字符串匹配算法 朴素算法 Rabin-Karp算法 有限自动机算法 KMP算法 14 有限自动机 定义: 有限自动机M 5

文档评论(0)

1亿VIP精品文档

相关文档