2011年9月25日

KMP 算法并非字符串查找的优化 [转]

摘要: 算法书和数据结构书对KMP算法多有介绍,称只需对字符串扫描一遍不需回溯云云.然而,它恐怕只应该作为一种思想存在;用于实际的字符串查找并不理想.要费劲心血实现和优化它,才能在特定的字符串上略微超过(也可能略微逊过)std::search. KMP算法的基本思想,是利用需要匹配字符串的自身信息来避免回溯.(这里讨论的算法是以C/C++为编程语言,因此下标索引以0开始) 例如:字符串PAT=”abcabcde”,里面第二段的abc和PAT开头的字符是匹配的. 假如我们有个要查找的字符串TEXT=”abcabD...”,在比较到TEXT的'D'处(TEXT[5])也即到了PAT的第二个 阅读全文

posted @ 2011-09-25 23:36 龙豆 阅读(2018) 评论(0) 推荐(0)

精确字符串匹配(BM算法) [转]

摘要: Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE ... 阅读全文

posted @ 2011-09-25 23:26 龙豆 阅读(1912) 评论(0) 推荐(0)

字符串模式匹配——Shift-And和Shift-OR算法[转]

摘要: Shift-And算法思想较之KMP算法很简单,设模式字符串为P,它主要通过保存一个集合D(D中记录了P中所有与当前已读text的某个后缀相匹配的前缀),每当text有新的字符读入,算法利用位并行机制来更新这个集合D。 设P长度为m,则集合D可表示为D=dm…d1而用D[j]代表dj D[j]=1当且仅当p1…pj是t1…ti的某个后缀,当D[m]=1时,就认为P已经于text匹配。 当读入下一个字符ti+1,需要计算新的集合D′.当且仅当D[j]=1并且ti+1等于pj+1时D'[j+1]=1.这是因为D[j]=1时有p1…pj是t1…ti的一个后缀,而当ti+1等于pj+1可推出. 阅读全文

posted @ 2011-09-25 22:49 龙豆 阅读(4657) 评论(1) 推荐(0)

导航