2012年4月26日

Shift And/Or字符串匹配算法

摘要: Shift-And算法是一种基于前缀的单字符串匹配算法,采用位运算。其算法思想比KMP简单得多。在最简单的brute force算法中,在文本串的每个位置都要进行m(模式串长度)次比较,而SHIFT AND算法则是利用位运算提高这个过程。现在计算机的字长一般为32,64位也开始流行了。一次比较的值为true or false,只需要一位即可存储,所以计算机可以在一次运算里完成位长次的比较。通过此思路可以把brute force的速度提高位长倍。Shift-And算法思想:设模式字符串为P,文本为text。它主要通过维护一个字符串集合D(D中记录了P中所有与当前已读text的某个后缀相匹配的.. 阅读全文

posted @ 2012-04-26 09:15 梦想Sky 阅读(3281) 评论(0) 推荐(0) 编辑

BNDM字符串匹配算法

摘要: horspool算法从右往左匹配,它跳转的时候只利用了一个字符的信息,这样使得跳转会比较短,速度比较慢。BNDM算法是一种跳转时考虑子串的算法。具体实现的时候,为了提高速度,用了跟SHIFT AND一样的技巧。对于字符集里的每个字符,计算它在模式串的哪些位置出现,然后用一个整数表示这个集合。用一个整数D表示当前活跃的状态,第i位为1,表示在模式串i的位置有一个子串匹配到了,子串的具体长度取决于源串匹配的情况。如果D里第m位为1,这时候表示找到了模式串的一个前缀,如果这时候源串也匹配了m个字符,则表示找到了模式串,否则,只是一个子串,这时候要调整一个跳转的长度。跳转的长度为m-这个前缀的长度。每 阅读全文

posted @ 2012-04-26 08:56 梦想Sky 阅读(7876) 评论(0) 推荐(0) 编辑

导航