数据结构4数组串广义表.ppt

字符串匹配算法 int String::find(String pat){ char *p=pat.ch,*s=ch; int i=0; If(*p*s) while(i=curlen-pat.curlen) if(*p++=*s++){ if(!*p) return i;} else{ i++;s=ch+i;p=pat.ch;} return -1; } 朴素的模式匹配算法 算法的时间复杂度分析:最坏O(l*p) 问题所在:每次只前进一步。 改进的算法:(每次前进尽可能多的步)O(l+p) 1970S.A。Cook证明了有O(l+p)的算法 D.E.Knuth V.R.Pratt 和J.H.Morris分别实现(未发表,利益原因) 1976 R.S.Boyer J.S.Morre BS算法(发表)KMP算法发表。 1980 Karp Rabin KR算法(1987发表) 近代发展:(病毒扫描)多Pattern扫描。 算法的基本分析:如何跑的更快? t0 t1 t2 …tj= p0 p1 p2 …pj , tj+1≠pj+1 如果 p0 p1 p2 …pj-1≠ p1 p2 …pj 那末只下移一个字符的下一趟比较必然“失配”。 问题是到底要下移多少最好? 多出了一个函数,计算一下下一步

文档评论(0)

1亿VIP精品文档

相关文档