`
wss71104307
  • 浏览: 224381 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

KMP算法实现(参考Wiki上算法描述)

阅读更多
#include <iostream>
using namespace std;

/**
* paramter pat:待匹配的字符串
* T: 返回的table
*
**/
void kmp_table(const char * W, int T[])
{
	int pos = 2;  //当前查找的位置
	int cnd = 0; //当前查找的前缀字串的位置


	T[0] = -1;
	T[1] = 0;

	while(pos < strlen(W))
	{
		if( W[cnd] == W[pos-1] ) 
		{
			T[pos] = cnd + 1;
			pos++;
			cnd++;
		}
		else if( cnd > 0 )
			cnd = T[cnd]; //回退,有难度

		else 
		{
			T[pos] = 0;
			++pos;
		}
	}

}

int kmp_search(const char * S,const char * W)
{
	int m = 0 ; //开始匹配的位置
	int i = 0 ; //W中位置

	int * T = new int[strlen(W)];



	kmp_table(W,T);

	for(int j = 0; j < strlen(W); j++)
	{
		cout << T[j] <<" ";
	}
	cout<<endl;

	while( (m + i) < strlen(S))
	{
		if(S[m+i] == W[i])
		{
			++i;
			if(i == strlen(W))
				return m;
		}
		else 
		{
			m = m + i - T[i];
			if( i > 0)  i = T[i];
		}
	}
}

int main()
{
	char * S = "acabaabaabcacaabc";
	char * W = "abaabcac";

	int p = kmp_search(S,W);

	cout<<"p = "<< p <<endl;
}
 
分享到:
评论

相关推荐

    kmp算法实现

    KMP算法实现 KMP算法实现 KMP算法实现 KMP算法实现

    C++实现的KMP算法

    用C++语言实现的KMP算法。经过调试。供广大算法学习者参考。

    KMP算法算法 KMP算法 KMP

    算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP

    Kmp算法Java实现源码

    KMP算法是通过分析子串,预先计算每个位置发生不匹配的时候,所需GOTO的下一个比较位置,整理出来一个next数组,然后在上面的算法中使用。

    kmp算法的代码实现

    数据结构、kmp算法、代码实现、KMP(char *P,char *T,int *N,int start)

    KMP算法的实现

    KMP算法的实现, 这程序代码是基于KMP算法来实现的,虽然很简单,但是可能也会对你有帮助的

    C语言实现kmp算法的C语言实现源码.zip

    C语言实现kmp算法的C语言实现源码.zipC语言实现kmp算法的C语言实现源码.zipC语言实现kmp算法的C语言实现源码.zipC语言实现kmp算法C语言实现kmp算法的C语言实现源码.zipC语言实现kmp算法的C语言实现源码.zipC语言实现...

    模式匹配中的KMP算法的实现

    模式匹配中的KMP算法的实现 模式匹配是计算机科学领域中的一个研究热点,串的模式匹配算法是其中的一个重要分支。在模式匹配中,KMP算法是一个非常重要的算法,它可以高效地实现串的模式匹配。下面我们将详细介绍...

    串的基本操作 kmp算法实现

    串的替换,删除,查找 以及KMP算法的具体的实现 c语言 数据结构

    用KMP算法实现的文本检索

    数据结构在这里起到了关键作用,因为KMP算法的效率很大程度上取决于如何有效地存储和访问部分匹配表。在实现KMP算法时,我们需要使用数组或链表等数据结构来存储模式串和部分匹配表,同时还需要理解栈和队列等其他...

    KMP算法实现模板(c++版)ACM算法

    **KMP算法实现模板(C++版) ACM算法** KMP(Knuth-Morris-Pratt)算法是一种在文本字符串中查找子串匹配的有效方法,尤其适用于已经预处理了模式串(子串)的匹配信息。它是由D.E. Knuth、V. Morris和J.H. Pratt...

    简单kmp算法实现

    简单的kmp算法实现,代码结构十分清晰,适合初学者理解kmp算法

    数据结构-KMP算法的实现.

    ### 数据结构-KMP算法的实现 #### 一、KMP算法概述 KMP算法是一种高效的字符串匹配算法,它由Donald E. Knuth、James H. Morris以及Vaughan R. Pratt三位学者共同提出,因此得名Knuth-Morris-Pratt算法(简称KMP...

    数据结果 kmp算法实验报告

    1. **比较Brute-Force算法和KMP算法的比较次数**:编写程序实现这两种算法,并统计它们在处理相同输入时的比较次数,从而直观地比较两者的效率差异。 2. **实现串的替换功能**:编写函数`Replace(S, start, T, V)`,...

    KMP算法详解 KMP算法详解

    KMP算法,全称为Knuth-Morris-Pratt算法,是一种高效的字符串匹配算法,由Donald Knuth、Vaughan Morris和Robert Pratt三位学者提出。它的主要目标是在一个长字符串(主串A)中查找是否存在一个指定的短字符串(模式...

    KMP算法实现(C语言)

    在C语言中实现KMP算法,我们需要理解其核心思想和步骤。 1. **KMP算法的核心思想**: - KMP算法的关键在于构造一个部分匹配表(也叫失配表),用于记录当主串与模式串比较时,如果发生不匹配,模式串应如何移动以...

    《字符串模式匹配KMP算法》教学课例设计[归纳].pdf

    通过本课例设计,学生将了解KMP算法的应用普遍性、实现机制和时间复杂度,并掌握计算next值的方法和判断算法优劣的方法。 一、教学目标 * 让学生了解KMP算法应用的普遍性,如在文字处理软件中的查找和替换操作。 *...

    KMP算法实现的C++代码

    下面我们将详细探讨KMP算法的原理、实现以及C++代码的编写。 ### KMP算法原理 1. **部分匹配表(Partial Match Table)**:KMP算法的核心是构建一个部分匹配表,也称为失配表。这个表记录了在模式串中每次不匹配时...

    KMP算法Java实现

    KMP算法实现,用Java语言实现的KMP字符串匹配算法

    JAVA实现KMP算法

    JAVA实现KMP算法,使用java语言实现的kmp算法

Global site tag (gtag.js) - Google Analytics