全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

数据结构“串”的模式匹配算法中的BF算法里的i-j2中的i,j分别是什么意思呢?

发布时间:2023-10-11 04:21:22
发布人:xqq

一、数据结构“串”的模式匹配算法中的BF算法里的i-j2

i-j+2就是匹配不成功然后指针回到起始位置再加1。

i-j+2 == i-(j-1)+1;

j-1是j移动的距离(j看作从1开始,而不是从0开始);i-(j-1)是i回到与子串比较的起始位置(不是一直回到i=1,i在多次匹配中不断的变大)。

然后[i-(j-1)] +1 就是回到起始位置之后再往后进一位。

例如名列前茅次匹配的时候,开始时i=1,j=1; 然后匹配失败,回溯后i+1,第二次匹配开始时就是i=2,j=1。再匹配失败,回溯到起始位置i=2后 i+1,第三次匹配开始时就是i=3,j=1;以此类推。

i=i-j+2 是数组下标从1开始的情况;

i=i-j+1 是数组下标从0开始的情况。

BF算法

BF算法介绍

Brute-Force简称为BF算法,亦称为简单匹配算法,采用穷举的思想。

S:a a a a b c d  主串:正文串

T:         a b c     子串:模式串

算法的思路是从S的每一个字符开始依次与T的字符进行匹配。

BF算法设计思想

Index_BF(S, T)

将主串的第pos个字符和模式串的名列前茅个字符比较,

若相等,继续逐个比较后续字符;

若不等,从主串的下一字符起,重新与模式串的名列前茅个字符比较。

直到主串的一个连续子串字符序列与模式串相等。返回值为S中与T匹配的子序列名列前茅个字符的序号即匹配成功。

否则,匹配失败,返回值-1。

延伸阅读:

二、KMP算法

KMP算法是一种字符串匹配算法,是由D.E.Knuth,J.H.Morris和V.R.Pratt提出的。其核心是利用字符串匹配失败后的的信息从而减少字符串与模式串的匹配次数从而提高字符串匹配的效率。

假设主串为s=”ababcabdabcabca”、模式串为p=”abcabc”,指针i、j分别指示主串和模式串所比较字符的位序号。

在名列前茅趟匹配中,由于,,,因此i=2,j=2;

按照之前的思路,我们应当修改i为1,j为0后再次进行比较。但由于,,因而,所以此时不必从i为1处进行匹配,而只需匹配和;

在第三趟匹配中,由于,显然此时有,。因为,,所以无需与和进行比较,而只需匹配和;又因为,所以,这两次比较也可以通过前次匹配的信息来略过;

通过以上的分析,我们不难发现,我们可以利用模式串自身的信息来计算模式串匹配失败后下一次所要匹配的位置,而主串的比较位置不需要回退。

当某次匹配失败时,有那么 = 。如果在模式串中存在这样的k,使得 = ,那么在下一次匹配时,我们便只需匹配和。特别地,当k=0时,我们应当匹配和。(k应当使得…最长)

通过以上的分析,我们可以知道其实该算法的关键在于获取一个next数组,通过该数组来记录模式串中各个位置的最长前缀子串从而避免重复匹配的出现。也就是说模式串每次开始匹配的位置由模式串本身来决定。

#it技术干货

相关文章

库存管理是什么?

库存管理是什么?

2023-10-11
okr需要哪些功能?

okr需要哪些功能?

2023-10-11
数据结构中内部排序可能达到的非常快速度是什么?

数据结构中内部排序可能达到的非常快速度是什么?

2023-10-11
在数据结构中p->next=head;head->next=p是什么意思?

在数据结构中p->next=head;head->next=p是什么意思?

2023-10-11

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取