gpt4 book ai didi

KMP 算法实例详解

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章KMP 算法实例详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

KMP 算法实例详解 。

KMP算法,是由Knuth,Morris,Pratt共同提出的模式匹配算法,其对于任何模式和目标序列,都可以在线性时间内完成匹配查找,而不会发生退化,是一个非常优秀的模式匹配算法.

分析:KMP模板题、KMP的关键是求出next的值、先预处理出next的值、然后一遍扫过、复杂度O(m+n) 。

实例代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include<stdio.h>
#include<string.h>
#define N 1000005
int s[N];
int p[N];
int next[N];
int m,n;
void getnext(){
  int j=0,k=-1;
  next[0]=-1;
  while (j<m){
   if (k==-1||p[j]==p[k]){
    j++;
    k++;
    next[j]=k;
   }
   else
    k=next[k];
  }
}
int kmp(){
  int i=0,j=0;
  getnext();
  while (i<n){
   if (j==-1||s[i]==p[j]){
    i++;
    j++;
   }
   else
    j=next[j];
   if (j==m)
    return i;
  }
  return -1;
}
int main(){
  int t;
  scanf ( "%d" ,&t);
  while (t--){
   scanf ( "%d%d" ,&n,&m);
   for ( int i=0;i<n;i++)
    scanf ( "%d" ,&s[i]);
   for ( int i=0;i<m;i++)
    scanf ( "%d" ,&p[i]);
   if (kmp()==-1)
    printf ( "-1\n" );
   else
    printf ( "%d\n" ,kmp()-m+1);
  }
  return 0;
}

以上就是KMP 算法的实例详解本站关于数据结构和算法的文章还有很多,希望大家搜索查阅,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持! 。

最后此篇关于KMP 算法实例详解的文章就讲到这里了,如果你想了解更多关于KMP 算法实例详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com