算法导论—字符串匹配
2016-01-04 13:03
204 查看
华电北风吹
天津大学认知计算与应用重点实验室
最后修改日期:2016/1/4
本文说说我对几个常用的字符串匹配算法的理解。
字符串匹配问题是指对于一个长度为n的文本数组T
,检测长度为m的模式文本数组P[m]在T中出现的位置。常见的方法有朴素算法,Rabin-Karp算法,有限自动机算法,KMP(Knuth-Morris-Pratt)算法和Boyer-Moor(BM)算法。
一、朴素算法
朴素算法不需要对模式进行预处理,直接用模式在文本数组上二层循环匹配(外层对模式逐个偏移,内层进行逐个匹配)。时间复杂度为O((n-m+1)m)。
此方法比较简单,不详细叙述。
二、Rabin-Karp算法
三、有限自动机算法
四、KMP算法
KMP算法基本思路也是通过对模式在文本数组上偏移匹配。巧妙的是KMP已经匹配过的模式可以用来挖掘匹配字符串的信息使得每个匹配字符串只匹配一次来提高效率。KMP对模式进行预处理时间复杂度O(m),匹配时间复杂度O(n)。总的来说KMP时间复杂度为O(m+n)。
五、BM算法
BM是一种比KMP更为高效的算法。目前文本处理软件(office)里面的查找功能就是使用的BM算法。KMP已经展示了可以通过预处理极大提高匹配效率,BM算法进一步提高预处理功能。BM算法通过预先计算生成《坏字符规则表》和《好后缀规则表》来提高匹配效率。
BM算法引入了”坏字符(bad character)”的概念。在匹配的过程中通过”坏字符规则”和”好后缀规则”来对文本数组进行匹配。
“坏字符规则—后移位数 = 坏字符的位置 - 搜索词中的上一次出现位置
“好后缀规则”—后移位数 = 好后缀的位置 - 搜索词中的上一次出现位置
参考资料:
1、算法导论(第三版)
2、字符串匹配的KMP算法
3、字符串匹配的Boyer-Moore算法
天津大学认知计算与应用重点实验室
最后修改日期:2016/1/4
本文说说我对几个常用的字符串匹配算法的理解。
字符串匹配问题是指对于一个长度为n的文本数组T
,检测长度为m的模式文本数组P[m]在T中出现的位置。常见的方法有朴素算法,Rabin-Karp算法,有限自动机算法,KMP(Knuth-Morris-Pratt)算法和Boyer-Moor(BM)算法。
一、朴素算法
朴素算法不需要对模式进行预处理,直接用模式在文本数组上二层循环匹配(外层对模式逐个偏移,内层进行逐个匹配)。时间复杂度为O((n-m+1)m)。
此方法比较简单,不详细叙述。
二、Rabin-Karp算法
三、有限自动机算法
四、KMP算法
KMP算法基本思路也是通过对模式在文本数组上偏移匹配。巧妙的是KMP已经匹配过的模式可以用来挖掘匹配字符串的信息使得每个匹配字符串只匹配一次来提高效率。KMP对模式进行预处理时间复杂度O(m),匹配时间复杂度O(n)。总的来说KMP时间复杂度为O(m+n)。
五、BM算法
BM是一种比KMP更为高效的算法。目前文本处理软件(office)里面的查找功能就是使用的BM算法。KMP已经展示了可以通过预处理极大提高匹配效率,BM算法进一步提高预处理功能。BM算法通过预先计算生成《坏字符规则表》和《好后缀规则表》来提高匹配效率。
BM算法引入了”坏字符(bad character)”的概念。在匹配的过程中通过”坏字符规则”和”好后缀规则”来对文本数组进行匹配。
“坏字符规则—后移位数 = 坏字符的位置 - 搜索词中的上一次出现位置
“好后缀规则”—后移位数 = 好后缀的位置 - 搜索词中的上一次出现位置
参考资料:
1、算法导论(第三版)
2、字符串匹配的KMP算法
3、字符串匹配的Boyer-Moore算法
相关文章推荐
- 材价看板(1)- 如何建立你的第一个kanban,看看这些暴露的问题你们有没有?
- android Mvp简单实用
- html天气预报小插件
- 图像处理和计算机视觉中的经典论文(部分)
- matlab显示的图片,手动保存时四周有白边
- 降维(二)----Laplacian Eigenmaps
- 降维(一)----说说主成分分析(PCA)的源头
- 机器学习的数学基础(1)--Dirichlet分布
- 计算机视觉Computer Vision的尴尬---by林达华
- node js学习(二)——REPL(交互式解释器)
- 设置字间距
- form上传文件设置文件最大限制
- 证书格式
- VS中调试DLL工程的正确方法
- easyui 日期控件清空值
- 设置为灰度图
- <二> 摄像头画面显示
- 点击短信中的url打开某个应用
- 再谈深度学习文本的表示
- iOS开发之数组排序