python实现BM和KMP算法
2010-10-28 23:32
393 查看
1.KMP算法
代码
def BoyerMooreHorspool(pattern, text):
m = len(pattern)
n = len(text)
if m > n: return -1
skip = []
for k in range(256): skip.append(m)
for k in range(m - 1): skip[ord(pattern[k])] = m - k - 1
skip = tuple(skip)
k = m - 1
while k < n:
j = m - 1; i = k
while j >= 0 and text[i] == pattern[j]:
j -= 1; i -= 1
if j == -1: return i + 1
k += skip[ord(text[k])]
return -1
if __name__ == '__main__':
text = "this is the string to search in"
pattern = "the"
s = BoyerMooreHorspool(pattern, text)
print 'Text:',text
print 'Pattern:',pattern
if s > -1:
print 'Pattern \"' + pattern + '\" found at position',s
这两个算法主要应用于字符串匹配。网上评论说BM性能优于KMP,我没验证过。改天可以用cProfile测试一下。
ps:今天分别用这两个算法,查找了69K文档的最后一行字符串,KMP用了0.053个CPU时间,BM仅用了0.025个CPU时间。
其实我非常想看一下sunday算法,据说是BM的改进,提升不少性能。研究了一下算法,是人性多了。但是现在网上没有它的python实现,改天尝试搞一个出来。
代码
def BoyerMooreHorspool(pattern, text):
m = len(pattern)
n = len(text)
if m > n: return -1
skip = []
for k in range(256): skip.append(m)
for k in range(m - 1): skip[ord(pattern[k])] = m - k - 1
skip = tuple(skip)
k = m - 1
while k < n:
j = m - 1; i = k
while j >= 0 and text[i] == pattern[j]:
j -= 1; i -= 1
if j == -1: return i + 1
k += skip[ord(text[k])]
return -1
if __name__ == '__main__':
text = "this is the string to search in"
pattern = "the"
s = BoyerMooreHorspool(pattern, text)
print 'Text:',text
print 'Pattern:',pattern
if s > -1:
print 'Pattern \"' + pattern + '\" found at position',s
这两个算法主要应用于字符串匹配。网上评论说BM性能优于KMP,我没验证过。改天可以用cProfile测试一下。
ps:今天分别用这两个算法,查找了69K文档的最后一行字符串,KMP用了0.053个CPU时间,BM仅用了0.025个CPU时间。
其实我非常想看一下sunday算法,据说是BM的改进,提升不少性能。研究了一下算法,是人性多了。但是现在网上没有它的python实现,改天尝试搞一个出来。
相关文章推荐
- KMP算法(Python实现)
- 字符串匹配的kmp算法 及 python实现
- KMP算法实现Python/Java
- python实现的二叉树算法和kmp算法实例
- python实现的二叉树算法和kmp算法实例
- 字符串匹配算法(KMP、BM和Sunday),及Python实现
- 字符串匹配算法(KMP、BM和Sunday),及Python实现
- KMP算法的python实现
- python kmp算法简单实现
- 字符串匹配的KMP算法——Python实现
- 字符串匹配的KMP算法和朴素算法,及其python实现
- KMP算法(Python实现)
- 【python】python数据结构(三)——字符串:KMP算法的实现
- python根据BM25实现文本检索
- python根据BM25实现文本检索
- Python实现KMP算法
- python的KMP算法实现
- 句子相似 BM25 python 实现
- python实现kmp算法(学不会你喷我)
- Python+MongoDB自增键值的实现