绝密笔记 | 数据结构 | 每日一练(109)

数据结构

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下

——老子

1

每日一练

1.设字符串 S=‘aabaabaabaac’,P=‘aabaac’

(1)给出 S 和 P 的 next 值和 nextval 值;

(2)若 S 作主串,P 作模式串,试给出利用 BF 算法和 KMP 算法的匹配过程。

2.设目标为 t=‘abcaabbabcabaacbacba’,模式为 p=‘abcabaa’

(1)计算模式 p 的 naxtval 函数值;

(2)不写出算法,只画出利用 KMP 算法进行模式匹配时每一趟的匹配过程。

正确答案

PS:||代表注释

1.

(1)S的next与nextval值分别为012123456789和002002002009,p的next与nextval值分别为012123和

002003。

(2)利用BF算法的匹配过程: 利用KMP算法的匹配过程:

第一趟匹配: aabaabaabaac 第一趟匹配:aabaabaabaac

aabaac(i=6,j=6) aabaac(i=6,j=6)

第二趟匹配: aabaabaabaac 第二趟匹配:aabaabaabaac

aa(i=3,j=2) (aa)baac

第三趟匹配: aabaabaabaac 第三趟匹配:aabaabaabaac

a(i=3,j=1) (成功) (aa)baac

第四趟匹配: aabaabaabaac

aabaac(i=9,j=6)

第五趟匹配: aabaabaabaac

aa(i=6,j=2)

第六趟匹配: aabaabaabaac

a(i=6,j=1)

第七趟匹配: aabaabaabaac

(成功) aabaac(i=13,j=7)

2.

(1)p的nextval函数值为0110132。(p的next函数值为0111232)。

(2)利用KMP(改进的nextval)算法,每趟匹配过程如下:

第一趟匹配: abcaabbabcabaacbacba

abcab(i=5,j=5)

第二趟匹配: abcaabbabcabaacbacba

abc(i=7,j=3)

第三趟匹配: abcaabbabcabaacbacba

a(i=7,j=1)

第四趟匹配: abcaabbabcabaac bacba

(成功) abcabaa(i=15,j=8)

-end-

正文完