串和BF算法、KMP算法

字串:串中任意个连续字符组成的子序列。

主串:包含子串的串。

字符位置:字符在序列中的序号为该字符在串中的位置。

子串位置:子串第一个字符在主串中的位置。

空格串:由一个或多个空格组成的串,与空串不同。

BF算法,亦称简单匹配算法。采用穷举法的思路。

匹配失败:

i=i-j+2 (回溯)

j=1 (从头开始)

算法复杂度O(n*m)

KMP算法

i不变,j后退

利用已经部分匹配的结果而加快模式串的滑动速度

且主串S的指针i不必回溯,可提速到O(n+m)。

在计算机科学中,字符匹配算法是两个重要的话题,其中 Boyer-Moore(BF)算法和 Knuth-Morris-Pratt (KMP) 算法被广泛应用。它们都是用于在一个文本中查找指定模式的高效算法。 1. Boyer-Moore (BF) 算法: BF 算法是一种改进的模式匹配算法,它试图从后向前搜索字符,跳过已经确定不包含模式的部分。其核心思想是利用模式中的信息,如坏字符规则和好后缀规则。在C++中,BF算法通常涉及预处理模式,计算坏字符和好后缀表。 - **坏字符规则**:对于每个字符,如果模式的某个位置不等于目标的当前字符,就直接跳过模式中与这个字符不匹配的最大长度。 - **好后缀规则**:利用已知的模式后缀是否出现在目标的当前部分的前缀中,跳过更长的距离。 2. Knuth-Morris-Pratt (KMP) 算法: KMP 算法是一种更精细的算法,它通过创建一个失配指针数组(也称为下一位置表),存储了模式中每一个位置到它的最长公共前后缀的长度。当匹配失败时,会利用这个信息决定如何前进,而不是简单地回溯。 - **失配指针表**:对于每个位置i,失配指针k保存了模式中以位置i开始的子和以位置k开始的相同前缀之后能匹配的最大长度。 - **匹配过程**:当匹配失败时,会检查失配指针,找到适当的跳转位置,而不是从头开始比较。 在C++中实现这两种算法,你需要了解如何动态创建失配指针表(KMP)或者构建和使用坏字符和好后缀信息(BF)。如果你需要具体的代码示例,我可以为你提供一些基本的伪代码或简单的C++代码片段。你想了解哪种算法的实现细节?或者你想要看一个简化的C++代码例子?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值