




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
字符串匹配算法 主讲人 郭鹏飞武汉光电国家实验室 字符串匹配算法 BF算法 BruteForce KMP算法 Knuth Morris Pratt Horspool算法Sunday算法BM算法 Boyer Moore 约定 文本串 T 被检索的字符串 查找其中是否有某子字符串模式串 M 文本串中要检索出的子串i 文本串中当前参与比较的元素下标j 模式串中当前参与比较的元素下标失配 与匹配相反 指T串与M串某位进行比较时出现不相等的情况 BF算法 原理 首先将文本串和模式串左对齐 然后从左向右一个一个进行比较 如果不成功则模式串向右移动一个单位 优点 简单易懂 易于实现缺点 时间复杂度为O len T len M KMP算法 KMP算法是一个经典的字符串匹配算法 主要思想是 每当一趟匹配过程中出现失配时 不需回溯i 而是利用已经得到的 部分匹配 的结果将模式串向右滑动尽可能远的距离后继续进行比较 实例 KMP算法 算法原理 当然 也可能正确匹配结果在T i 之后 此时的位移值s j 只需要选取位移j 1 s j 1 位 此时 也不会滤过正确匹配位移值 失配后 M串要向右移动 如果移动s j s 0 位后 为正确匹配结果 那么有M j 1 M j s 1 M j 2 M j s 2 M s M 0 且M j M j s 以上是正确匹配的必要条件 根据此必要条件 寻找符合条件的位移大小s 而满足这个必要条件的s可能有多个 那么只需选取其中最小s 最大重复串 这样就不会滤过正确匹配位移值 KMP算法 失配后最大重复串求法 Mr j Max k k 0或00 失配后模式串M最小位移求法 位移大小实际会转换成j位置的更换 此处直接使用next j 来表示M j 失配后j的新值 KMP算法 算法流程 1 计算next j 数组 左对齐T串与M串 i j 0 2 从i开始依次比较T i 与M j 字符 3 如果匹配则i j递增 4 如果失配 那么 当next j 1时 i j 0 当next j 1时 j next j 转向步骤2 Horspool算法 原理 首先将T串与M串左端对齐 从M串的末位从右到左比较字符 匹配就继续比较直到比较完成 失配的情况下 从M串失配的位置起 往左寻找与T串失配字符相等的字符 然后将M串向右移动相应的距离 转移到步骤2 找不到 则将M串左边与失配T i 字符的下一位对齐 转移到步骤2 Horspool算法 正确性 失配发生时 M串要向右移动 T串的失配字符T i 可能是正确结果中的一个元素也可能不是 如果不是 那么可以将M串的首位与T串中的 i 1 位对齐 继续进行比较 如果是 那么 自M串失配位置 j 开始向左的任意一位与M i 相等的字符c确定的比较位置都可能是完全匹配的 其产生的位移依次为k1 k2 ki为j location c 综合这两种情况 选择位移最小值k1 这样就能保证不会错过正确匹配的情况 优点 这个算法是字符串匹配算法中从右向左匹配的创始者 且其失配情况下不是 1位移 平均时间复杂度为O len T 缺点 只是用了当前匹配位的特征 没有使用之前比较的历史数据 使得失配后M串位移没有最大化 Sunday算法 原理 首先将T串与M串左端对齐 从M串的末位从右到左比较字符 匹配就继续比较直到比较完成 失配的情况下 选中T串与M串右对齐端的下一个字符T i 从M串末位往左寻找与该字符相等的字符M j 找到后 T i 与M j 对齐 转移到步骤2 找不到 则M串左端与T i 的下一个字符对齐 转移到步骤2 Sunday算法 正确性 设定T串与M串右对齐端的下一位序列为i T i C T串与M串比较过程中失配时 M串至少要向右移一位继续进行比较 那么T i 是正确匹配过程中的必经元素且T i 可能是正确结果中的一个元素 如果不是 M串左端与T i 1 对齐 继续进行比较 如果是 T i 要与M串中为值为C的元素对齐进行比较 其产生的位移值有多个 以上两种情况中 选取位移最小的进行对齐比较 保证一定不会滤过正确匹配位置 Sunday算法 BM Boyer Moore 算法 BM算法是在基于Horspool算法的一种改进算法 其广泛应用于实际的项目中 算法原理 匹配时 同Horspool算法 当失配时 计算M串失配字符的右边已经匹配了的字符串 称为 好后缀 在M串中其他位置出现的位置 得到一个右移大小值 实际这个值是预先计算好了的 将这个值与Horspool失配时M串移动大小的值进行比较 并选择其中较大者 对M串移动后 继续进行比较 BM算法 BM算法的好后缀相关规定及计算方法 1 好后缀 的位置以最后一个字符为准 假定 ABCDEF 的 EF 是好后缀 则它的位置以 F 为准 即5 从0开始计算 2 如果 好后缀 在搜索词中只出现一次 则它的上一次出现位置为 1 比如 EF 在 ABCDEF 之中只出现一次 则它的上一次出现位置为 1 即未出现 3 如果 好后缀 有多个 则除了最长的那个 好后缀 其他 好后缀 的上一次出现位置必须在头部 比如 假定 BABCDAB 的 好后缀 是 DAB AB B 这个规则也可以这样表达 如果最长的那个 好后缀 只出现一次 则可以把搜索词改写成如下形式进行位置计算 DA BABCDAB 即虚拟加入最前面的 DA BM算法 重复串不包含第m位 重复串包含第m位 但不是从M串的左端开始 重复串包含第m位 且从M串的左端开始 重复串为失配位右侧完整子串 好后缀可能为失配位右侧完整子串或者是包含最右侧元素M m 的最长连续子串 且子串最左端的元素等于M 0 BM算法 实例 BM算法 BF算法实现 intbf constchar text constchar mode inttext length strlen text intmode length strlen mode inti j for i 0 i text length mode length i for j 0 j mode length j if mode j text i j break if j mode length returni return 1 KMP算法实现 voidget next constchar mode int nextval inti 0 j 1 len strlen mode nextval i 1 while i len 1 if j 1 mode i mode j i j if mode i mode j nextval i j elsenextval i nextval j elsej nextval j intkmp constchar source constchar mode intsource length strlen source intmode length strlen mode inti 0 j 0 int pnext newint mode length get next mode pnext while j mode length Horspool算法实现 inthorspool constchar source constchar mode intsource length strlen source intmode length strlen mode inti 0 j mode length 1 k while i 0 j if mode j source i j for k j 1 k 0 k if mode k source i j break i i j k j mode length 1 break if j 0 returni return 1 Sunday算法实现 intsunday constchar source constchar mode intsource length strlen source intmode length strlen mode inti 0 j
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025房地产公司客户服务人员劳动合同范本
- 2025年二手车销售与保养一体化服务合同
- 2025年环保产业园循环经济模式中的废弃物处理与资源化利用技术创新报告
- 年产4000吨生物反应器细胞培养线项目可行性研究报告
- 年产320吨头孢呋辛钠项目可行性研究报告
- 2025年建筑施工安全管理信息化在施工现场安全管理中的应用前景分析报告
- 数字化展示技术在文化遗产保护与传播中的创新应用研究报告
- 工业互联网平台建设与数据驱动的运维方案
- 沼气处理技术在2025年新能源产业链融合的智能化能源创新应用案例分析
- 移动应用开发全流程指南
- 2025年注册测绘师测绘综合能力的真题卷(附答案)
- 项目城市轨道交通风险管理与安全评估刘连珂
- 道路施工机械设备安全知识培训
- AI在护理查房中的应用
- 证券行业智能化投资组合管理方案
- 银行员工消保知识培训
- 地理与劳动教育
- 第5课 甲午中日战争与列强瓜分中国狂潮 公开课一等奖创新教学设计
- 初中数学新人教版七年级上册第二章《有理数的运算》教案(2024秋)
- 人教版(2025新版)七年级下册数学第七章 相交线与平行线 单元测试卷(含答案)
- 厂房消防应急预案
评论
0/150
提交评论