码迷,mamicode.com
首页 > 编程语言 > 详细

KMP算法

时间:2015-04-30 16:09:10      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:acm   算法   kmp   

KMP算法又称为看毛片算法,经常使用的子串的匹配的问题上,具有o(n*log(n))的效率

其中最关键的使计算next数组的操作,需要仔细思考

#include <stdio.h>
#include <string.h>

/*模式*/
typedef struct my_Pattern
{
	char data;
	char next_index;
}pattern;

void get_next(char* pt,int* next,int pt_size)
{
	int i=1;
	int j=0;
	next[1]=0;
	while(i<pt_size)
	{
		if(j==0 || pt[j]==pt[i])
		{
			i++;
			j++;
			next[i]=j;
		}
		else
		{
			j=next[j];
		}
	}
}

int Brute_Force(char* obj,char* Pat,int pos)
{
	
	return 0;
}

/*返回子串pat在主串obj第pos个字符串之后的位置,若不存在,则返回0*/
int KMP_index(char* obj,char* Pat,int pos,int obj_size,int Pat_size)
{
	int i=pos;
	int j=1;
	int next[255];
	
	get_next(Pat,next,Pat_size);
	
	while(i<obj_size && j<=Pat_size)
	{
		if(0==j || obj[i]==Pat[j])
		{
			i++;
			j++;
		}
		else
			j=next[j];
	}
	if(j>Pat_size)
		return i-Pat_size;
	else
		return 0;
}


int main(int argc,char** argv)
{
	int ppp;
	char p1[]=" asdasdasdfghj";
	char p2[]=" sdasdf";
	ppp=KMP_index(p1,p2,1,strlen(p1)-1,strlen(p2)-1);
	printf("%d\n",ppp);
	return 0;
}


KMP算法

标签:acm   算法   kmp   

原文地址:http://blog.csdn.net/u011889952/article/details/45395737

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!