舍卒保车,壮士断腕。(描述时空权衡)
题目描述
Boyer-Moore字符串搜索算法是一种高效的字符串搜索算法.它是由鲍勃·博耶和J·斯特罗瑟·摩尔于1977年开发的。该算法预处理正在搜索的目标字符串(键),但不预处理要搜索的字符串(与某些算法不同,这些算法预处理要搜索的字符串,然后可以通过反复搜索来摊销预处理的开销)。Boyer-Moore算法的执行时间实际上可以是次线性的:它不需要实际检查要搜索的字符串的每个字符,而是跳过其中的一些字符。通常,当搜索的密钥变得更长时,算法会变得更快。它的效率源于这样一个事实,即每次试图在搜索字符串和它正在搜索的文本之间找到匹配项时,它都会使用从该尝试中获得的信息来排除字符串无法匹配的文本中尽可能多的位置。
算法是如何工作的:
当人们第一次遇到Boyer-Moore算法时,人们经常会感到惊讶的是,它的验证--它试图检查某个特定位置是否存在匹配--向后工作。例如,如果它在文本开头开始搜索“Anpanman”一词,它会检查文本的第八个位置,看看它是否包含“N”。如果它找到了“N”,它会移动到第七个位置,看它是否包含单词的最后一个“A”,等等,直到它检查文本的第一个位置是否为“A”为止。当我们考虑如果验证失败时,Boyer-Moore采取这种反向方法的原因更清楚--例如,如果我们在第八位没有找到“N”,而是找到了一个“X”。“X”没有出现在“Anpanman”中的任何地方,这意味着在文本的开头--或者后面