模式匹配与 kmp 算法
DESCRIPTION
模式匹配与 KMP 算法. Zn http://spaces.msn.com/znzhou/. OUTLINE. 什么是模式匹配 朴素匹配算法 KMP 算法 效率对比 更多模式匹配算法. OUTLINE. 什么是模式匹配 朴素匹配算法 KMP 算法 效率对比 更多模式匹配算法. 哪个是今天要讨论的模式匹配. the The quick brown fox jumps over the lazy dog jay The quick brown fox j umps over the l a z y dog. 模式匹配. - PowerPoint PPT PresentationTRANSCRIPT
2006-4-9 1/41
模式匹配与 KMP 算法模式匹配与 KMP 算法Zn http://spaces.msn.com/znzhou/Zn http://spaces.msn.com/znzhou/
2006-4-9 2/41
OUTLINEOUTLINE
什么是模式匹配朴素匹配算法KMP 算法效率对比更多模式匹配算法
什么是模式匹配朴素匹配算法KMP 算法效率对比更多模式匹配算法
2006-4-9 3/41
OUTLINEOUTLINE
什么是模式匹配朴素匹配算法KMP 算法效率对比更多模式匹配算法
什么是模式匹配朴素匹配算法KMP 算法效率对比更多模式匹配算法
2006-4-9 4/41
哪个是今天要讨论的模式匹配哪个是今天要讨论的模式匹配
theThe quick brown fox jumps over
the lazy dog
jayThe quick brown fox jumps over
the lazy dog
theThe quick brown fox jumps over
the lazy dog
jayThe quick brown fox jumps over
the lazy dog
2006-4-9 5/41
模式匹配模式匹配
Finding all occurrences of a pattern in a text
eg. 'abc' in 'acbcdabc'
Finding all occurrences of a pattern in a text
eg. 'abc' in 'acbcdabc'
2006-4-9 6/41
OUTLINEOUTLINE
什么是模式匹配朴素匹配算法KMP 算法效率对比更多模式匹配算法
什么是模式匹配朴素匹配算法KMP 算法效率对比更多模式匹配算法
2006-4-9 7/41
The naive string-matching algorithm
The naive string-matching algorithm
ababcabcacbababcac
How does it work?
ababcabcacbababcac
How does it work?
2006-4-9 8/41
a b a b c a b c a c b a b
a b a b c a b c a c b a b
a b a b c a b c a c b a b
a b c a c
a b c a c
a b c a c
第一次匹配
第二次匹配
第三次匹配
2006-4-9 9/41
a b a b c a b c a c b a b
a b a b c a b c a c b a b
a b a b c a b c a c b a b
a b c a c
a b c a c
a b c a c
第六次匹配
第五次匹配
第四次匹配
2006-4-9 10/41
int Normal(int pos){
int i,j;i=pos;j=0;while(s[i]!=0&&j<length){
if(s[i]==t[j]){i++;j++;}else{i=i-j+1;j=0;}
}if(j==length)
return i-length;else
return -1;}
2006-4-9 11/41
复杂度分析复杂度分析
一般情况效率可以近似认为 O(m+n)
极端特殊情况O(mn)
一般情况效率可以近似认为 O(m+n)
极端特殊情况O(mn)
2006-4-9 12/41
OUTLINEOUTLINE
什么是模式匹配朴素匹配算法KMP 算法效率对比更多模式匹配算法
什么是模式匹配朴素匹配算法KMP 算法效率对比更多模式匹配算法
2006-4-9 13/41
What’s KMP?What’s KMP?
2006-4-9 14/41
Knuth-Morris-PrattKnuth-Morris-Pratt
Professor Emeritus of The Art of Computer Programming at Stanford University, welcomes you to his home page.
Donald E. Knuth , 1938 年出生于 Wisconsin 。 1960 年,当他毕业于 Case Institute of Technology 数学系时,因为成绩过于出色,被校方打破历史惯例,同时授予学士和硕士学位。他随即进入大名鼎鼎的加州理工学院数学系,仅用三年时间便取得博士学位,此时年仅 25 岁。 毕业后留校任助理教授, 28岁时升为副教授。 30 岁时,加盟斯坦福大学计算机系,任正教授。从 31 岁那年起,他开始出版他的历史性经典巨著: The Art of Computer Programming。他计划共写 7 卷,然而仅仅出版三卷之后,已经震惊世界,使他获得计算机科学界的最高荣誉 Turing Award! 此时,他年仅 38 岁!后来,此书与牛顿的“自然哲学的数学原理”等一起,被评为“世界历史上最伟大的十种科学著作”之一。
2006-4-9 15/41
The KMP string-matching algorithm
The KMP string-matching algorithm
abbcaccabbaabcababcdbacabcd
How does it work?
abbcaccabbaabcababcdbacabcd
How does it work?
2006-4-9 16/41
a b a b c a b c a c b a b
a b a b c a b c a c b a b
a b a b c a b c a c b a b
a b c a c
a b c a c
a b c a c
第三次匹配
第二次匹配
第一次匹配
2006-4-9 17/41
Next[j]Next[j]
j 0 1 2 3 4
模式串 a b c a c
Next[j] -1 0 0 0 1
a b a b c a b c a c b a ba b c a c
a b c a ca b c a c
2006-4-9 18/41
int KMP(char*t,int pos){
int i,j;i=pos;j=0;
while(s[i]!=0&&j<length){
if(j==-1||t[j]==s[i]){i++;j++;}else{j=next[j];}
}if(j==length)
return i-j;else
return -1;}
2006-4-9 19/41
复杂度分析复杂度分析
O(m+n)
2006-4-9 20/41
How to gain next[j]?How to gain next[j]?
2006-4-9 21/41
以眼杀人--观察法以眼杀人--观察法
a b a a b c a c
-1 1 1 20 0 0 1
a b aaa b c c
2006-4-9 22/41
ExerciseExercise
a b c a b a a b c b c
a a b a a c a a d a
a b a b a b a b-1 0 0 0 1 2 1 1 2 0 0
-1 0 0 1 2 3 4 5
-1 0 1 0 1 2 0 1 2 0
2006-4-9 23/41
程序实现程序实现
a b a a b c a c
Next[i] -1 1 1 20 0 0 1T
If(j==-1||s[j]==t[i])
i++;j++;next[i]=j;
Elsej=next[j]
S j
i
2006-4-9 24/41
void CalcNext(char*t){
int i,j;i=0;next[0]=-1;j=-1;while(i<length-1){
if(j==-1||t[i]==t[j]){i++;j++;next[i]=j;}else{j=next[j];}
}}
2006-4-9 25/41
OUTLINEOUTLINE
什么是模式匹配朴素匹配算法KMP 算法效率对比更多模式匹配算法
什么是模式匹配朴素匹配算法KMP 算法效率对比更多模式匹配算法
2006-4-9 26/41
朴素算法与 KMP 算法的比较朴素算法与 KMP 算法的比较
复杂度使用资源效率
复杂度使用资源效率
2006-4-9 27/41
KMP 算法的改进KMP 算法的改进
一个例子模式串 :aaaab主串 : aaabaaaab
一个例子模式串 :aaaab主串 : aaabaaaab
j 0 1 2 3 4
模式 a a a a b
Next[j] -1 0 1 2 3
Nextval[j] -1-1 -1 -1 3
2006-4-9 28/41
OUTLINEOUTLINE
什么是模式匹配朴素匹配算法KMP 算法效率对比更多模式匹配算法
什么是模式匹配朴素匹配算法KMP 算法效率对比更多模式匹配算法
2006-4-9 29/41
更多模式匹配算法更多模式匹配算法
Boyer-Moore 算法 这个算法 KMP 算法的不同点是在作s[k+1..k+m] 与 t[1..m] 的匹配测试时是从右到左,而不是从左到右。
Rabin-Karp 算法这个算法用到数论中诸如两个整数关于第三个整数取模的等价性等初等概念。
Boyer-Moore 算法 这个算法 KMP 算法的不同点是在作s[k+1..k+m] 与 t[1..m] 的匹配测试时是从右到左,而不是从左到右。
Rabin-Karp 算法这个算法用到数论中诸如两个整数关于第三个整数取模的等价性等初等概念。
2006-4-9 30/41
SUMMARYSUMMARY
什么是模式匹配朴素匹配算法KMP 算法效率对比更多模式匹配算法
什么是模式匹配朴素匹配算法KMP 算法效率对比更多模式匹配算法
2006-4-9 31/41
THANK YOU!
Zn http://spaces.msn.com/znzhou/