`

KMP算法

阅读更多

算法思想:

一种改进的字符串匹配算法,由D.E.Knuth与V.R.Pratt和J.H.Morris同时发现,因此称之为KMP算法。此算法可以在O (n+m)的时间数量级上完成串的模式匹配操作,其基本思想是:每当匹配过程中出现字符串比较不等时,不需回溯指针,而是利用已经得到的“部分匹配”结果将模式向右“滑动”尽可能远的一段距离,继续进行比较。


package com.java.caul;

public class test2 {
private static int[] get_nextval(String t) {

int i = 0, j = -1;
int[] next = new int[t.length()];
next[0] = -1;
char[] s = t.toCharArray();

while (i < next.length-1) {
if (j == -1 || s[i] == s[j]) {
i++;
j++;
next[i] = j;
} else
j = next[j];

}
for (int k = 0; k < next.length; k++) {
System.out.print(next[k] + "  ");
}
System.out.println();
return next;
}

private static int index_KMP(String s, String t) {
int []next=get_nextval(t);
int i = 0;
int j = -1;
while (i < s.length() && j < t.length()) {
if (j == -1 || (s.charAt(i) == t.charAt(j))) {
i++;
j++;
} else
//j = (next[j] - 1);
j=next[j];
}
if (j >= t.length() - 1) {
return (i - t.length() + 1);
} else
return -1;
}

public static void main(String[] args) {
System.out.println(index_KMP("Test ititi ititit! Test ititit!这个会匹配2次", "ititit"));
System.out.println(index_KMP("abababababcababb","ababcabab")) ;

}

}


运行结果:

-1  0  0  1  2  3 
12
-1  0  0  1  2  0  1  2  3 
7
分享到:
评论
1 楼 mars914 2012-02-11  
函数get_nextval是个死循环,怎么能得出结果?

相关推荐

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

    KMP算法

    KMP算法算法 KMP算法 KMP

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

    KMP算法详解 KMP算法详解

    KMP算法详解KMP算法详解KMP算法详解KMP算法详解KMP算法详解

    kMP算法JavakMP算法JavakMP算法JavakMP算法Java

    kMP算法JavakMP算法JavakMP算法JavakMP算法JavakMP算法JavakMP算法JavakMP算法JavakMP算法JavakMP算法JavakMP算法JavakMP算法JavakMP算法JavakMP算法JavakMP算法JavakMP算法JavakMP算法JavakMP算法JavakMP算法Java...

    KMP算法详解KMP算法详解

    KMP算法详解KMP算法详解KMP算法详解KMP算法详解

    C++实现的KMP算法

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

    kmp算法的代码实现

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

    数据结果 kmp算法实验报告

    kmp算法,数据结构的实验报告,大学实验报告,希望能帮到大家

    KMP算法Flash演示

    数据结构中KMP算法过程的Flash演示

    Python实现字符串匹配的KMP算法

    kmp算法 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串...

    DS串应用--KMP算法

    DS串应用--KMP算法DS串应用--KMP算法DS串应用--KMP算法DS串应用--KMP算法

    Kmp算法Java实现源码

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

    数据结构课程设计-kmp算法

    KMP算法是对一般模式匹配算法的改进,由D.E.Knuth与V.R.Pratt和J.H.Morris 同时发现的因此人们称它为克努特-莫里斯-莫拉特操作(简称为KMP算法)。 对于一般的模式匹配算法:分别利用两个指针i和j指示主串S和T中的...

    KMP算法 严蔚敏版

    此程序配合清华大学出版《数据结构(C语言版)》 P83-84页的KMP算法 win tc调试通过

    kmp算法实现

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

    KMP算法(C++)示例代码

    KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配...

    kmp算法.ppt

    kmp算法的原理以及kmp算法的源代码

    模式匹配:KMP算法

    使用KMP算法实现模式匹配,包括next数组的求解,kmp算法的实现。关键代码有详细注释。

    KMP算法的实现

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

    利用KMP算法进行子串的快速查找

    利用KMP算法进行子串的快速查找,能够达到较高的速率

Global site tag (gtag.js) - Google Analytics