模式匹配与 KMP 算法

Post on 22-Jan-2016

127 views 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 of 模式匹配与 KMP 算法

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/