算法——Boyer–Moore–Horspool algorithm(翻译版)

本文介绍了Boyer-Moore-Horspool算法,这是一种高效的字符串搜索算法,通过预处理搜索字符串来提高性能。算法利用'坏字符移位'和'好后缀移位'减少不必要的比较,其复杂度为O(N)。文章提供了算法的工作原理、性能分析,并给出了算法在字符串匹配问题中的应用实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

舍卒保车,壮士断腕。(描述时空权衡) 

题目描述

Boyer-Moore字符串搜索算法是一种高效的字符串搜索算法.它是由鲍勃·博耶和J·斯特罗瑟·摩尔于1977年开发的。该算法预处理正在搜索的目标字符串(键),但不预处理要搜索的字符串(与某些算法不同,这些算法预处理要搜索的字符串,然后可以通过反复搜索来摊销预处理的开销)。Boyer-Moore算法的执行时间实际上可以是次线性的:它不需要实际检查要搜索的字符串的每个字符,而是跳过其中的一些字符。通常,当搜索的密钥变得更长时,算法会变得更快。它的效率源于这样一个事实,即每次试图在搜索字符串和它正在搜索的文本之间找到匹配项时,它都会使用从该尝试中获得的信息来排除字符串无法匹配的文本中尽可能多的位置。

 算法是如何工作的

当人们第一次遇到Boyer-Moore算法时,人们经常会感到惊讶的是,它的验证--它试图检查某个特定位置是否存在匹配--向后工作。例如,如果它在文本开头开始搜索“Anpanman”一词,它会检查文本的第八个位置,看看它是否包含“N”。如果它找到了“N”,它会移动到第七个位置,看它是否包含单词的最后一个“A”,等等,直到它检查文本的第一个位置是否为“A”为止。当我们考虑如果验证失败时,Boyer-Moore采取这种反向方法的原因更清楚--例如,如果我们在第八位没有找到“N”,而是找到了一个“X”。“X”没有出现在“Anpanman”中的任何地方,这意味着在文本的开头--或者后面

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值