设主串S=‘abcaabbabcabaacbacba’,模式串P=‘abcabaa’ (1)计算模式串P的next值和nextval函数值; (2)不写出算法,只画出利用KMP算法(利用改进的nextval值)进行模式匹配时每一趟的匹配过程。
时间: 2023-06-08 20:08:43 浏览: 268
好的,我会保密您的要求。以下是您的问题的回答:
(1)计算模式串P的next值和nextval函数值:
P的next数组为[0,0,0,1,2,0,1]。
nextval函数值为[0,0,0,1,2,0,1],因为P中的第一个字符a没有前缀也没有后缀,其next值为0,所以nextval(1)=0。第二个字符b没有前缀,后缀为a,则nextval(2)=0。第三个字符c没有前缀,后缀为ab,则nextval(3)=0。第四个字符a有前缀和后缀均为abc,则nextval(4)=1。第五个字符b有前缀和后缀均为abc,ab,则nextval(5)=2。第六个字符a没有前缀和后缀均为abcab,则nextval(6)=0。第七个字符a有前缀和后缀均为abcaba,则nextval(7)=1。
(2)利用KMP算法进行模式匹配时每一趟的匹配过程:
将主串和模式串对齐后,首先将模式串第一个字符与主串对应位置进行比较,如果相同,则继续比较下一个字符,否则利用next数组向右移动模式串。
以S=‘abcaabbabcabaacbacba’,P=‘abcabaa’为例,匹配过程如下表所示:
| 主串位置 | 匹配字符 | 模式串位置 | next值 | nextval值 |
| ---------- | ---------- | ---------- | -------- | --------- |
| 1 | a | 1 | 0 | 0 |
| 2 | b | 2 | 0 | 0 |
| 3 | c | 3 | 0 | 0 |
| 4 | a | 4 | 1 | 1 |
| 5 | a | 5 | 2 | 2 |
| 6 | b | 6 | 0 | 0 |
| 7 | a | 4 | 1 | 1 |
| 8 | b | 2 | 0 | 0 |
| 9 | c | 3 | 0 | 0 |
| 10 | a | 4 | 1 | 1 |
| 11 | a | 5 | 2 | 2 |
| 12 | c | 6 | 0 | 0 |
| 13 | b | 2 | 0 | 0 |
| 14 | a | 4 | 1 | 1 |
| 15 | a | 5 | 2 | 2 |
| 16 | c | 6 | 0 | 0 |
| 17 | b | 2 | 0 | 0 |
| 18 | a | 4 | 1 | 1 |
阅读全文