串的模式匹配
利用KMP算法思想,完成以下两个操作:
1、分别求出下面两个模式串的next值和nextval值,并用表格呈现。
(1)t1=“ababaa
i | 0 | 1 | 2 | 3 | 4 | 5 |
t[i] | a | b | a | b | a | a |
next[i] | -1 | 0 | 0 | 1 | 2 | 3 |
nextval[i] | -1 | 0 | -1 | 0 | -1 | 3 |
(2)t2=“abaabaab”
j | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
t[j] | a | b | a | a | b | a | a | b |
next[i] | -1 | 0 | 0 | 1 | 1 | 2 | 3 | 4 |
nextval[i] | -1 | 0 | -1 | 1 | 0 | -1 | 1 | 0 |
2、假设病毒的DNA序列为t=“abaacba”,某患者的DNA序列为s=“abcaabbabcabaacbacba”,请你利用串结构的相关知识检测该患者是否感染病毒。
(1)请你回答检测检测该患者是否感染病毒的这项工作的实质是什么?
检测该患者是否感染病毒的实质是进行字符串匹配,即查找患者DNA序列中是否存在病毒的DNA序列。
(2)选择KMP算法是否合适,能检测出该患者是否感染病毒吗?并分析原因。
KMP算法是一种高效的字符串匹配算法,适用于解决DNA序列匹配问题。因此,选择KMP算法是合适的,可以检测出该患者是否感染病毒。
(3)请指出这里面进行检测的主串和模式串分别是什么?
这里进行检测的主串是患者的DNA序列s,模式串是病毒的DNA序列t。
(4)利用没有修正的KMP算法,请计算模式串的next数组值。
k | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
t[k] | a | b | a | a | c | b | a |
next[k] | -1 | 0 | 0 | 1 | 1 | 0 | 0 |
(5)请根据问题(4)中的next数组,画出模式匹配的过程。
(6)利用改进的KMP算法,请计算模式串的nextval数组值。
n | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
t[n] | a | b | a | a | c | b | a |
next[n] | -1 | 0 | 0 | 1 | 1 | 0 | 0 |
nextval[n] | -1 | 0 | -1 | 1 | 1 | 0 | -1 |
(7)请根据问题(6)中的nextval数组,画出模式匹配的过程。