求教BM算法
求教:BM算法。
具体疑问如下:
首先谈谈我的理解:
假定模式为P,文本为T,从左至右已经匹配了P的一个子串,假设为A,然后发现一个字符不匹配,为了利用已经匹配的信息,我们把A作为一个整体来考虑。为了重新匹配,需要把P右移。但是具体怎么右移,我不是很理解。请高手指点。麻烦讲得详细点,因为我很笨的。谢谢了。
[解决办法]
http://www.yuanma.org/data/2007/0604/article_2650.htm
[解决办法]
是在说kmp算法吧。。。
[解决办法]
这属于好后缀规则(good suffix rule);
就是在P中找一个子串B',使得B'与A的一个前缀B匹配;
假设 B=xc,B'=x'c';其中x,x'是单个字符;c,c'是字符串
匹配规则就是 c==c',x!=x';
[解决办法]
仔细看了下,发现之前说的不准确;
假设:
已匹配的字符串为A=p[i+1...i+n];
不匹配的字符为t[j+i]!=p[i]=c;
那么首先在p中查找是否有存在有子串p[k...k+n],其中p[k]!=c,p[k+1...k+n]= p[i+1...n]=A; 且k>i;
如果存在这样的子串,右移P使得p[k]与t[j+i]对齐;
如果不存在这样的子串,那么在P中查找p前缀与A的后缀相同的最大的一个,
即最大的k,使得p[1...k]=A[n-k+1...n];
右移P使得p[1]与t[j+i+n-k+1]对齐;
[解决办法]
一个很好的网址:
http://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm