除了 Knuth-Morris-Pratt、Rabin-Karp 等,还都有哪些可用的字符串匹配算法?
Posted
技术标签:
【中文标题】除了 Knuth-Morris-Pratt、Rabin-Karp 等,还都有哪些可用的字符串匹配算法?【英文标题】:What are the available string matching algorithms besides Knuth-Morris-Pratt, Rabin-Karp and likes of it?除了 Knuth-Morris-Pratt、Rabin-Karp 等,还有哪些可用的字符串匹配算法? 【发布时间】:2011-02-24 15:18:31 【问题描述】:除了 Knuth-Morris-Pratt、Rabin-Karp 等,还有哪些可用的字符串匹配算法?
【问题讨论】:
【参考方案1】:这些算法被广泛引用的纲要可以在以下位置找到:
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.133.4896&rep=rep1&type=pdf
包括以下算法:
Karp-Rabin
Shift Or
Morris-Pratt
Knuth-Morris-Pratt
Simon
Colussi
Galil-Giancarlo
Apostolico-Crochemore
Not So Naive
Forward Dawg Matching
Boyer-Moore
Turbo-BM
Apostolico-Giancarlo
Reverse Colussi
Horspool
Quick Search
Tuned Boyer-Moore
Zhu-Takaoka
Berry-Ravindran
Smith
Raita
Reverse Factor
Turbo Reverse Factor
Backward Oracle Matching
加上大约 15 个人。
顺便说一句,如果您确实对此感兴趣,您可能想澄清一下您是否也对密切相关的字符串 相似度 算法(例如,Levenshtein 距离等)感兴趣。
【讨论】:
我的眼睛!我可怜的眼睛!使用 Adobe Acrobat 无法查看该文件。非常感谢......我只是很难过它不可读(不,我不是在开玩笑) 如果你放大,还不错。还有其他版本,包括 PostScript 和 html(我觉得没什么用,但是 YMMV):scholar.google.com/…【参考方案2】:这个页面有很多算法的简要描述:http://www-igm.univ-mlv.fr/~lecroq/string/index.html
【讨论】:
【参考方案3】:Simone Faro 和 Thierry Lecroq 提供了一个 C 实现和对 86 种精确字符串匹配算法的参考 "String Matching Algorithms Research Tool".
他们还提供了一个框架来对字符串匹配算法进行基准测试:
____________________________________________________________
Experimental results on englishTexts
Searching for a set of 200 patterns with length 128
Testing 5 algorithms
- [1/5] BM ..................[OK] 0.88 ms
- [2/5] EPSM ................[OK] 0.38 ms
- [3/5] KMP .................[OK] 6.23 ms
- [4/5] KR ..................[OK] 1.84 ms
- [5/5] TW ..................[OK] 2.70 ms
算法
BM = 博耶摩尔 (1977) EPSM = 精确压缩字符串匹配算法 (2013) KMP = Knuth Morris-Pratt (1977) KR = 卡普·拉宾 (1987) TW = 两路 (1991)【讨论】:
以上是关于除了 Knuth-Morris-Pratt、Rabin-Karp 等,还都有哪些可用的字符串匹配算法?的主要内容,如果未能解决你的问题,请参考以下文章
Knuth-Morris-Pratt 算法中的 DFA 构造
输入路径不存在:hdfs://localhost:9000/user/rab/input
ZOJ 17届校赛 Knuth-Morris-Pratt Algorithm
ZOJ 3957: Knuth-Morris-Pratt Algorithm