免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4400 | 回复: 1
打印 上一主题 下一主题

python实现BM和KMP算法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-02 14:44 |只看该作者 |倒序浏览
1.KMP算法

  1. def compute_prefix_function(p):
  2.     m = len(p)
  3.     pi = [0] * m
  4.     k = 0
  5.     for q in range(1, m):
  6.         while k > 0 and p[k] != p[q]:
  7.             k = pi[k - 1]
  8.         if p[k] == p[q]:
  9.             k = k + 1
  10.         pi[q] = k
  11.     return pi

  12. def kmp_matcher(t, p):
  13.     n = len(t)
  14.     m = len(p)
  15.     pi = compute_prefix_function(p)
  16.     q = 0
  17.     for i in range(n):
  18.         while q > 0 and p[q] != t[i]:
  19.             q = pi[q - 1]
  20.         if p[q] == t[i]:
  21.             q = q + 1
  22.         if q == m:
  23.             return i - m + 1
  24.     return -1
复制代码
2.BM算法例子
  1. ef BoyerMooreHorspool(pattern, text):
  2.     m = len(pattern)
  3.     n = len(text)
  4.     if m > n: return -1
  5.     skip = []
  6.     for k in range(256): skip.append(m)
  7.     for k in range(m - 1): skip[ord(pattern[k])] = m - k - 1
  8.     skip = tuple(skip)
  9.     k = m - 1
  10.     while k < n:
  11.         j = m - 1; i = k
  12.         while j >= 0 and text[i] == pattern[j]:
  13.             j -= 1; i -= 1
  14.         if j == -1: return i + 1
  15.         k += skip[ord(text[k])]
  16.     return -1

  17. if __name__ == '__main__':
  18.     text = "this is the string to search in"
  19.     pattern = "the"
  20.     s = BoyerMooreHorspool(pattern, text)
  21.     print 'Text:',text
  22.     print 'Pattern:',pattern
  23.     if s > -1:
  24.         print 'Pattern \"' + pattern + '\" found at position',s
复制代码
这两个算法主要应用于字符串匹配。

论坛徽章:
0
2 [报告]
发表于 2010-11-03 03:54 |只看该作者
更喜欢你把paper也发出来
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP