设有两个串
目标
辨析模式匹配的定义、朴素匹配与 KMP 的指针行为与复杂度,掌握 next 与 nextval 的推导、KMP 匹配过程的比较次数统计,并用 2019/2024 统考真题与中科院 2018、西安邮电 2019 考研真题检验。
前置知识
建议先阅读 3.2 模式匹配与 KMP 正文。本套题目默认采用王道教材的 1-based 约定(next[1] = 0、nextval[1] = 0),滑动距离为
环境、输入与预期输出
- 环境:任意现代浏览器;建议准备纸笔或一份错题记录。
- 输入:本页按源文件顺序整理的 15 道选择题。
- 预期输出:一份独立作答记录,以及每道错题的错误原因和正确推理。
作答方法
- 阅读题面后点击一个选项,先写下选择依据;
- 点击“提交答案”,再核对对错、正确答案和题解;
- 做错的题点击“重新作答”后再次推导,直到能说明其余选项为什么不成立;
- 完成全部题目后再展开组件生成的答案总览,避免只记答案字母。
选择题
KMP 算法的特点是在模式匹配时,指示主串的指针( )。
设主串的长度为
在 KMP 算法中,用 next 数组存放模式串的部分匹配信息。当模式串位
在 KMP 算法中,用 next 数组存放模式串的部分匹配信息。当模式串位
设主串
设主串
设主串
KMP 算法使用修正后的 next 数组进行模式匹配,模式串为
现有字符串
已知模式串
串 "ababaaababaa" 的 next 数组为( )。
串 "ababaabab" 的 nextval 为( )。
设
在 KMP 算法中,若模式串
答案总览(建议完成全部题目后查看)
- 第 1 题:C
- 第 2 题:B
- 第 3 题:C
- 第 4 题:D
- 第 5 题:B
- 第 6 题:B
- 第 7 题:C
- 第 8 题:B
- 第 9 题:A
- 第 10 题:A
- 第 11 题:D
- 第 12 题:C
- 第 13 题:A
- 第 14 题:D
- 第 15 题:B
完成清单
思考题
- 为什么 KMP 能保证主串指针 i 只增不减?这个保证依赖模式串的什么信息?
- nextval 相比 next 额外消除了哪一类冗余比较?它会让匹配过程跳过本来可能成功的位置吗?
- 统计字符比较次数时,最容易漏数或多数的是哪一步?
- 滑动距离
在什么情况下最大?能否从模式串结构一眼判断?
复盘
- 我最容易把哪个结论记反:主串指针 vs 模式串指针、朴素 vs KMP 的复杂度?
- 我是否每次都能画出匹配过程表,而不是凭感觉猜次数?
- 真题与普通题在统计比较次数时有什么必须注意的差别?