📜  用于模式搜索的Boyer Moore算法(1)

📅  最后修改于: 2023-12-03 15:11:17.589000             🧑  作者: Mango

用于模式搜索的Boyer Moore算法

Boyer Moore算法是一种常用的字符串匹配算法,它可以在较短时间内在一个文本串中查找一个模式串是否出现,且效率比较高。其基本思想是从模式串(T)末尾开始匹配,并在匹配失败时根据已匹配的字符决定移动模式串(T)的位置,从而达到快速匹配的目的。

算法流程
  1. 预处理: 对模式串(T)进行预处理,计算出模式串(T)中每个字符最后出现的位置。
  2. 匹配过程: 从文本串(S)的第一个字符开始匹配,根据模式串(T)最后一个字符的位置计算出起始位置,比较文本串(S)和模式串(T)中相同位置的字符。如果相同,则继续比较;如果不同,则根据已匹配的字符根据预处理的信息选择移动模式串(T),并重复上述步骤。
示例代码
def boyer_moore_search(text, pattern):
    last_occurrence = {}
    for i, char in enumerate(pattern):
        last_occurrence[char] = i
    n, m = len(text), len(pattern)
    i = m - 1  
    if i > n - 1:
        return -1   
    j = m - 1  
    while i < n:
        if text[i] == pattern[j]:
            if j == 0:
                return i  
            else:
                i -= 1   
                j -= 1   
        else:
            if text[i] not in last_occurrence:
                shift = j + 1
            else:
                shift = j - last_occurrence[text[i]]
            i += m - min(j, 1 + last_occurrence.get(text[i], -1))   
            j = m - 1  
    return -1  
应用场景

Boyer Moore算法常用于文本编辑器中的查找操作中,以及计算机防病毒程序中的病毒查找操作中,还可以用于字符串比对、数据压缩、数据加密等领域。