`
chongz
  • 浏览: 7699 次
  • 性别: Icon_minigender_1
  • 来自: 大连
最近访客 更多访客>>
社区版块
存档分类
最新评论

python实现字符串匹配的Boyer-Moore算法

 
阅读更多
'''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

分享到:
评论

相关推荐

    cpp代码-boyer-Moore算法实现

    当目标模式(Pattern)中的某个字符与主串(Text)中的对应位置不匹配时,Boyer-Moore算法会根据坏字符规则计算出一个偏移量,使模式尽可能地跳过不匹配的部分。这个偏移量是通过查找坏字符在模式中的位置和模式...

    字符串匹配1

    在本主题中,我们将探讨几种不同的字符串匹配方法,重点是BruteForceStringMatch(蛮力字符串匹配)以及Boyer-Moore算法。 首先,让我们详细了解一下蛮力字符串匹配。这种算法是最直观的方法,其基本思路是对文本中...

    Boyer–Moore–Horspool algorithm

    Boyer–Moore–Horspool 算法是一种高效的字符串搜索算法,它由 Robert S. Boyer 和 J Strother Moore 在 1977 年提出,并在后续的研究中得到了进一步的发展与优化。该算法的核心思想是通过预处理目标字符串(即被...

    Parser-iruri-de-caractere:可以在字符串解析器中执行metoda Boyer-Moore。 字符串表中的字符串(matricea delta)。 Pe baza acestuia se va realiza parsarea string2 pentru a se calcula decalajul(offset-ul)

    在Python中实现Boyer-Moore算法,首先需要对模式字符串进行预处理,生成Delta矩阵,然后在主循环中,根据坏字符规则和好后缀规则决定移动的步长,直至找到模式字符串或搜索结束。 在提供的"Parser-iruri-de-...

    python 实现 字符串 综合大作业 课程设计 代码

    python 实现 字符串 综合大作业 课程设计 代码 等20个项目 Aho-Corasick算法(Aho Corasick) 字符串排列变换(Alternative String Arrange) 字母异位词(Anagrams) 基于前缀树的自动补全(Autocomplete Using ...

    BM算法很详尽的算法讲解

    BM算法,全称为Boyer-Moore算法,是一种高效的字符串搜索算法,特别适用于大规模数据的搜索场景。与其他常见的字符串搜索算法(如KMP算法)不同,BM算法采取了一种从右至左的比较方式,并且结合了两个重要的启发式...

    Python实现字符串匹配算法代码示例

    总之,Python中实现字符串匹配算法时,可以选择蛮力法作为基础实现,而当对性能有更高要求时,可以考虑使用Horspool算法或其他更高效的算法,如KMP、Boyer-Moore等,这些算法通过各种优化策略进一步减少了不必要的...

    华为od-华为od练习题之求字符串字符匹配-题库题解.zip

    2. 字符匹配:这是计算机科学中的核心问题,常见算法有朴素匹配、KMP算法、Boyer-Moore算法、Rabin-Karp算法等,用于在一个字符串中查找另一个字符串出现的位置。 3. 编程语言基础:无论是哪种编程语言,如Python、...

    华为-华为od题库练习题之字符串字符匹配.zip

    2. Boyer-Moore算法:Boyer-Moore算法基于坏字符规则和好后缀规则,通过预处理模式串,可以快速跳过不可能匹配的部分,尤其在处理长模式串时表现优秀。 3. Rabin-Karp算法:Rabin-Karp算法利用哈希函数将字符串匹配...

    kmp算法-基于Python实现的kmp字符串搜索算法.zip

    而与Boyer-Moore算法和Rabin-Karp算法相比,KMP在某些特定情况下可能稍逊一筹,但其简单性和易于理解使其成为初学者学习字符串匹配算法的良好起点。 在压缩包中的文件"**kmp算法_基于Python实现的kmp字符串搜索算法...

    DNA-Sequencing-Boyer-Moore-Approximate-Matching:用Python编码的几种DNA测序算法

    具有近似匹配的DNA测序算法:Boyer-Moore,K-Mer指数,Pigeon-Hole。 Python编码了几种DNA测序算法: 通用天真近似匹配最多允许n个不匹配 具有近似匹配的Boyer-Moore预处理 博伊尔·摩尔(Boyer-Moore)的鸽子洞和...

    基于字符串模式匹配算法的病毒感染检测问题 实验四(源代码+实验报告)

    3. **Boyer-Moore算法**:利用模式串中字符的出现信息,跳过部分不必要的比较,进一步优化了匹配速度。分为坏字符规则和好后缀规则两种优化策略。 4. **Rabin-Karp算法**:利用哈希函数快速比较子串,但可能会有...

    boyer-moore-visualization-rs:重新实现https的Rust

    出于教育目的,Boyer-Moore字符串匹配算法的Rust实现。 我先前的Python实现(作为学术项目的一部分)可以在找到。 该可视化在支持ANSI转义序列的终端上起作用。 还需要支持Unicode字符的字体(例如 )。 跑步 可以...

    python-leetcode面试题解之第28题找出字符串中第一个匹配项的下标-python题解.zip

    Boyer-Moore算法是另一种高效的字符串查找方法,通过预处理查找表来减少不必要的比较,尤其在目标子串较长且主字符串中存在大量不匹配字符时表现优秀。不过,这里不再详述其具体实现,因为它相对复杂。 面试中的...

    char_comp.rar_字符串匹配_字符串匹配comp

    为了优化性能,更复杂的字符串匹配算法如KMP(Knuth-Morris-Pratt)、Boyer-Moore、Rabin-Karp等可以被采用,尤其是在处理大量数据时。不过,这些高级算法通常用于在字符串中查找子串,而非简单的等价比较。 总的来...

    算法与数据结构:字符串

    3. **Boyer-Moore算法**:利用模式串的后缀信息,跳过不匹配的部分,通常比KMP更快。 4. **Rabin-Karp算法**:使用哈希函数对模式串和主串进行预处理,通过哈希值快速判断部分匹配,时间复杂度为O(n + m)。 5. **...

    带通配符的字符串匹配.zip

    3. **Boyer-Moore算法**:通过跳过部分字符加快匹配速度,但需要预先处理模式串。 4. **Rabin-Karp算法**:使用哈希函数进行快速比较,但可能有哈希冲突。 5. **Aho-Corasick算法**:用于处理多个模式串的匹配,构建...

    python算法数据结构课程视频含代码之字符串1G

    - **Boyer-Moore算法**:这是一种更快的字符串搜索算法,通过从右向左扫描来减少不必要的比较次数。 #### 字符串排序算法 - **快速排序**:虽然通常用于整数或浮点数数组,但也可以用于字符串排序。 - **归并排序**...

    python查找字符串

    在Python编程中,字符串操作是极其基础且重要的部分。它涉及到文本处理、数据解析和...同时,为了提高性能,可能还需要考虑使用更高效的数据结构(如集合set)或算法(如KMP算法、Boyer-Moore算法)进行字符串查找。

    sunday算法

    Boyer-Moore算法是一种经典的子字符串搜索算法,它利用了两种主要的技术:bad character shift(坏字符规则)和good suffix shift(好后缀规则)。尽管Boyer-Moore算法在很多情况下已经非常高效,但Sunday算法仍然能...

Global site tag (gtag.js) - Google Analytics