'''http://www.ruanyifeng.com/blog/2013/05/boyer-moore_string_search_algorithm.html''' def isCharactorIn(s,c): try: pos = s.index(c) except ValueError: pos = -1 return pos def compare(str1,str2): l1 = len(str1) - 1 l2 = len(str2) - 1 if l1 != l2: return (-2,None) while l1 >= 0: if str1[l1] != str2[l1]: return (l1,str1[l1]) l1 -= 1 return (0,None) def boyer_moore_search(string, des): l = len(des) - 1 strlen = len(string)-1 start,end = 0,0 while strlen >= 0: end = start + len(des) print string[start:end] cr = compare(string[start:end],des) if cr[0] == -2: print 'not found' break if cr[0] == 0: return end - l else: pos = isCharactorIn(des,cr[1]) if cr[0] == (len(des)-1): if pos != -1: start += len(des) -1 - pos else: start += len(des) else: if pos == -1: # have good string goodPos = isCharactorIn(des,des[l]) if goodPos == l: start += l + 1 else: start += l - goodPos boyer_moore_search("here is a simple example", 'example')
以上是boyer-moore算法的实现,具体请看阮一峰blog
相关推荐
当目标模式(Pattern)中的某个字符与主串(Text)中的对应位置不匹配时,Boyer-Moore算法会根据坏字符规则计算出一个偏移量,使模式尽可能地跳过不匹配的部分。这个偏移量是通过查找坏字符在模式中的位置和模式...
在本主题中,我们将探讨几种不同的字符串匹配方法,重点是BruteForceStringMatch(蛮力字符串匹配)以及Boyer-Moore算法。 首先,让我们详细了解一下蛮力字符串匹配。这种算法是最直观的方法,其基本思路是对文本中...
Boyer–Moore–Horspool 算法是一种高效的字符串搜索算法,它由 Robert S. Boyer 和 J Strother Moore 在 1977 年提出,并在后续的研究中得到了进一步的发展与优化。该算法的核心思想是通过预处理目标字符串(即被...
在Python中实现Boyer-Moore算法,首先需要对模式字符串进行预处理,生成Delta矩阵,然后在主循环中,根据坏字符规则和好后缀规则决定移动的步长,直至找到模式字符串或搜索结束。 在提供的"Parser-iruri-de-...
python 实现 字符串 综合大作业 课程设计 代码 等20个项目 Aho-Corasick算法(Aho Corasick) 字符串排列变换(Alternative String Arrange) 字母异位词(Anagrams) 基于前缀树的自动补全(Autocomplete Using ...
BM算法,全称为Boyer-Moore算法,是一种高效的字符串搜索算法,特别适用于大规模数据的搜索场景。与其他常见的字符串搜索算法(如KMP算法)不同,BM算法采取了一种从右至左的比较方式,并且结合了两个重要的启发式...
总之,Python中实现字符串匹配算法时,可以选择蛮力法作为基础实现,而当对性能有更高要求时,可以考虑使用Horspool算法或其他更高效的算法,如KMP、Boyer-Moore等,这些算法通过各种优化策略进一步减少了不必要的...
2. 字符匹配:这是计算机科学中的核心问题,常见算法有朴素匹配、KMP算法、Boyer-Moore算法、Rabin-Karp算法等,用于在一个字符串中查找另一个字符串出现的位置。 3. 编程语言基础:无论是哪种编程语言,如Python、...
2. Boyer-Moore算法:Boyer-Moore算法基于坏字符规则和好后缀规则,通过预处理模式串,可以快速跳过不可能匹配的部分,尤其在处理长模式串时表现优秀。 3. Rabin-Karp算法:Rabin-Karp算法利用哈希函数将字符串匹配...
而与Boyer-Moore算法和Rabin-Karp算法相比,KMP在某些特定情况下可能稍逊一筹,但其简单性和易于理解使其成为初学者学习字符串匹配算法的良好起点。 在压缩包中的文件"**kmp算法_基于Python实现的kmp字符串搜索算法...
具有近似匹配的DNA测序算法:Boyer-Moore,K-Mer指数,Pigeon-Hole。 Python编码了几种DNA测序算法: 通用天真近似匹配最多允许n个不匹配 具有近似匹配的Boyer-Moore预处理 博伊尔·摩尔(Boyer-Moore)的鸽子洞和...
3. **Boyer-Moore算法**:利用模式串中字符的出现信息,跳过部分不必要的比较,进一步优化了匹配速度。分为坏字符规则和好后缀规则两种优化策略。 4. **Rabin-Karp算法**:利用哈希函数快速比较子串,但可能会有...
出于教育目的,Boyer-Moore字符串匹配算法的Rust实现。 我先前的Python实现(作为学术项目的一部分)可以在找到。 该可视化在支持ANSI转义序列的终端上起作用。 还需要支持Unicode字符的字体(例如 )。 跑步 可以...
Boyer-Moore算法是另一种高效的字符串查找方法,通过预处理查找表来减少不必要的比较,尤其在目标子串较长且主字符串中存在大量不匹配字符时表现优秀。不过,这里不再详述其具体实现,因为它相对复杂。 面试中的...
为了优化性能,更复杂的字符串匹配算法如KMP(Knuth-Morris-Pratt)、Boyer-Moore、Rabin-Karp等可以被采用,尤其是在处理大量数据时。不过,这些高级算法通常用于在字符串中查找子串,而非简单的等价比较。 总的来...
3. **Boyer-Moore算法**:利用模式串的后缀信息,跳过不匹配的部分,通常比KMP更快。 4. **Rabin-Karp算法**:使用哈希函数对模式串和主串进行预处理,通过哈希值快速判断部分匹配,时间复杂度为O(n + m)。 5. **...
3. **Boyer-Moore算法**:通过跳过部分字符加快匹配速度,但需要预先处理模式串。 4. **Rabin-Karp算法**:使用哈希函数进行快速比较,但可能有哈希冲突。 5. **Aho-Corasick算法**:用于处理多个模式串的匹配,构建...
- **Boyer-Moore算法**:这是一种更快的字符串搜索算法,通过从右向左扫描来减少不必要的比较次数。 #### 字符串排序算法 - **快速排序**:虽然通常用于整数或浮点数数组,但也可以用于字符串排序。 - **归并排序**...
在Python编程中,字符串操作是极其基础且重要的部分。它涉及到文本处理、数据解析和...同时,为了提高性能,可能还需要考虑使用更高效的数据结构(如集合set)或算法(如KMP算法、Boyer-Moore算法)进行字符串查找。
Boyer-Moore算法是一种经典的子字符串搜索算法,它利用了两种主要的技术:bad character shift(坏字符规则)和good suffix shift(好后缀规则)。尽管Boyer-Moore算法在很多情况下已经非常高效,但Sunday算法仍然能...