摘要: BNDM算法的搜索方法与BDM算法相同,但它使用了位并行来识别子串。 与原始的BDM相比,BNDM更简单,内存用量更少,具有更好的引用局部性,并且易于扩展到更复杂的模式串的情形。 在当前搜索窗口内,设已读入的字符串为u,BNDM算法维护一个集合,记录u在prv中的所有出现位置。同shift—and算法一样,该集合可以用一个位向量D来表示。如果子串pj...pj+|u|-1等于u,那么D的第m-j+1位是1,表示p的位置j是一个活动状态。 当读入一个新的文本字符σ时,要从D更新到D'。D‘的一个活动状态j对应于σu在模式串中的一个起始位置,也就是说: * u出现在模式串的位置j+1,即. 阅读全文
posted @ 2012-12-11 20:31 Eric1990 阅读(539) 评论(0) 推荐(0)
摘要: 如果我们想要建立一个自动机,使它能够接收一个串s的所有后缀,那么最暴力的想法应该就是,直接用这个串的所有后缀来建立一个AC自动机上面就是用aabbabd这个字母串作为母串建立的AC自动机(没有画fail边,好吧,那它就是个字母树...),嗯,建出这个东西的确就可以接收此串的所有后缀了,但是但是,聪明的朋友就会发现,这玩意儿的节点个数是O(n^2)级别的….我只给了你一个串,你就用了串长度平方个节点,害得我对于两位数的节点只能画更大的圆,太坑爹了吧。所以我们就需要YY出一个O(n)级别的节点个数和转移数的自动机也就是后缀自动机来处理这个问题。假设我们已经YY出了一个可以接收串S的后缀自动机A,那 阅读全文
posted @ 2012-12-11 15:52 Eric1990 阅读(202) 评论(0) 推荐(0)
摘要: 非原创,仅供自学用转自:http://www.cnblogs.com/dsky/archive/2012/04/24/2467655.htmlHorspool是后缀搜索,也就是搜索已读入文本中是否含有模式串的后缀;如果有,是多长,显然,当后缀长度等于模式串的长度时,我们就找到了一个匹配。Horspool算法认为:对于每个文本搜索窗口,将窗口内的最后一个字符(C)与模式串的最后一个字符进行比较。如果相等,则继续从后向前验证其他字符,直到完全相等或者某个字符不匹配。然后,无论匹配与否,都将根据在模式串的下一个出现位置将窗口向右移动。匹配串:abcbcsdxzcxx模式串:cbcac这个时候我们从右 阅读全文
posted @ 2012-12-11 15:19 Eric1990 阅读(279) 评论(0) 推荐(0)
摘要: 文章转自:http://www.searchtb.com/2011/07/%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%8C%B9%E9%85%8D%E9%82%A3%E4%BA%9B%E4%BA%8B%EF%BC%88%E4%B8%80%EF%BC%89.html本系列文章主要介绍几种常用的字符串比较算法,包括但不限于蛮力匹配算法,KMP算法,BM算法,Horspool算法,Sunday算法,fastsearch算法,KR算法等等。本文主要介绍KMP算法和BM算法,它们分别是前缀匹配和后缀匹配的经典算法。所谓前缀匹配是指:模式串和母串的比较从左到右,模式串的移动也是从左到右; 阅读全文
posted @ 2012-12-11 11:46 Eric1990 阅读(193) 评论(0) 推荐(0)