模式匹配与 kmp 算法

31
2006-4-9 1/41 模模模模模 KMP 模模 Zn http://spaces.msn.com/znzhou/

Upload: xue

Post on 22-Jan-2016

113 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

Page 1: 模式匹配与 KMP 算法

2006-4-9 1/41

模式匹配与 KMP 算法模式匹配与 KMP 算法Zn http://spaces.msn.com/znzhou/Zn http://spaces.msn.com/znzhou/

Page 2: 模式匹配与 KMP 算法

2006-4-9 2/41

OUTLINEOUTLINE

什么是模式匹配朴素匹配算法KMP 算法效率对比更多模式匹配算法

什么是模式匹配朴素匹配算法KMP 算法效率对比更多模式匹配算法

Page 3: 模式匹配与 KMP 算法

2006-4-9 3/41

OUTLINEOUTLINE

什么是模式匹配朴素匹配算法KMP 算法效率对比更多模式匹配算法

什么是模式匹配朴素匹配算法KMP 算法效率对比更多模式匹配算法

Page 4: 模式匹配与 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

Page 5: 模式匹配与 KMP 算法

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'

Page 6: 模式匹配与 KMP 算法

2006-4-9 6/41

OUTLINEOUTLINE

什么是模式匹配朴素匹配算法KMP 算法效率对比更多模式匹配算法

什么是模式匹配朴素匹配算法KMP 算法效率对比更多模式匹配算法

Page 7: 模式匹配与 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?

Page 8: 模式匹配与 KMP 算法

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

第一次匹配

第二次匹配

第三次匹配

Page 9: 模式匹配与 KMP 算法

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

第六次匹配

第五次匹配

第四次匹配

Page 10: 模式匹配与 KMP 算法

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;}

Page 11: 模式匹配与 KMP 算法

2006-4-9 11/41

复杂度分析复杂度分析

一般情况效率可以近似认为 O(m+n)

极端特殊情况O(mn)

一般情况效率可以近似认为 O(m+n)

极端特殊情况O(mn)

Page 12: 模式匹配与 KMP 算法

2006-4-9 12/41

OUTLINEOUTLINE

什么是模式匹配朴素匹配算法KMP 算法效率对比更多模式匹配算法

什么是模式匹配朴素匹配算法KMP 算法效率对比更多模式匹配算法

Page 13: 模式匹配与 KMP 算法

2006-4-9 13/41

What’s KMP?What’s KMP?

Page 14: 模式匹配与 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 岁!后来,此书与牛顿的“自然哲学的数学原理”等一起,被评为“世界历史上最伟大的十种科学著作”之一。

Page 15: 模式匹配与 KMP 算法

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?

Page 16: 模式匹配与 KMP 算法

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

第三次匹配

第二次匹配

第一次匹配

Page 17: 模式匹配与 KMP 算法

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

Page 18: 模式匹配与 KMP 算法

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;}

Page 19: 模式匹配与 KMP 算法

2006-4-9 19/41

复杂度分析复杂度分析

O(m+n)

Page 20: 模式匹配与 KMP 算法

2006-4-9 20/41

How to gain next[j]?How to gain next[j]?

Page 21: 模式匹配与 KMP 算法

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

Page 22: 模式匹配与 KMP 算法

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

Page 23: 模式匹配与 KMP 算法

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

Page 24: 模式匹配与 KMP 算法

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];}

}}

Page 25: 模式匹配与 KMP 算法

2006-4-9 25/41

OUTLINEOUTLINE

什么是模式匹配朴素匹配算法KMP 算法效率对比更多模式匹配算法

什么是模式匹配朴素匹配算法KMP 算法效率对比更多模式匹配算法

Page 26: 模式匹配与 KMP 算法

2006-4-9 26/41

朴素算法与 KMP 算法的比较朴素算法与 KMP 算法的比较

复杂度使用资源效率

复杂度使用资源效率

Page 27: 模式匹配与 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

Page 28: 模式匹配与 KMP 算法

2006-4-9 28/41

OUTLINEOUTLINE

什么是模式匹配朴素匹配算法KMP 算法效率对比更多模式匹配算法

什么是模式匹配朴素匹配算法KMP 算法效率对比更多模式匹配算法

Page 29: 模式匹配与 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 算法这个算法用到数论中诸如两个整数关于第三个整数取模的等价性等初等概念。

Page 30: 模式匹配与 KMP 算法

2006-4-9 30/41

SUMMARYSUMMARY

什么是模式匹配朴素匹配算法KMP 算法效率对比更多模式匹配算法

什么是模式匹配朴素匹配算法KMP 算法效率对比更多模式匹配算法

Page 31: 模式匹配与 KMP 算法

2006-4-9 31/41

THANK YOU!

Zn http://spaces.msn.com/znzhou/