[置顶] kmp算法的实现及心得体会

说实话,学习了这么长时间的数据结构,对于算法的实现能力好像并不强,尤其是一些大师们设计出的算法,例如:kmp算法,普利姆算法,克鲁斯卡尔算法,狄克斯特拉算法等等,说实话我认为知原理是远远不够的,因为只知其原理说明对一个事物的看法只是在一个浅层次里,只有看过了,写过了,调试过了,才算是真正的了解(并不是掌握),真正的掌握是对于前辈们的算法非常熟悉后,能后自己写出更加简洁,在时间空间复杂度上更进一步的算法。

对于下面的程序如果有错误的希望大家批评指正。

该程序的目的:输入两个字符串,并输出其匹配次数和匹配点。
#include<iostream>
#include<string.h>
using namespace std;
void next1(char c[],int []);
int main()
{
	char a[1000],b[1000];
	int next[100];
	int i=0,j=0,c,d,k=0;
	gets(a);
	gets(b);
	c=strlen(a);
	d=strlen(b);
	next1(b,next);
	while(i<c&&j<d)
	{
		if(j==-1||a[i]==b[j])
		{
			j++;
			i++;
		}
		else
		{	j=next[j];
			k++;
		}
	}
	cout<<k+1<<' ';
	cout<<i-j+1;
	return 0;

}
void next1(char c[],int next[])
{
	int b;
	b=strlen(c);
	next[0]=-1;
	int j=0,k=-1;

	while(j<b)
	{
		if(k==-1||c[j]==c[k])
		{
			k++;
			j++;
			next[j]=k;
		}
		else
			k=next[k];

		
	}

}

运行结果:
[置顶] kmp算法的实现及心得体会_第1张图片


你可能感兴趣的:([置顶] kmp算法的实现及心得体会)