`
yiminghe
  • 浏览: 1460529 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

KMP 最优字符串查找算法

阅读更多

可惜我就是讲不明白 , 直接上书   ,见图片附件 ,手机 500M 像素 蛮清楚的

 

import java.util.Arrays;

/**
 * User: yiminghe
 * Date: 2009-2-19
 * Time: 16:37:57
 */
public class Kmp {


    /**
     * index[i]  越小 ,滑动越多,匹配速度越快
     *
     * @param pattern
     * @return
     */
    private static int[] getFail(String pattern) {


        int[] index = new int[pattern.length()];
        index[0] = -1;
        int lengthP = pattern.length();

        for (int i = 1; i < lengthP; i++) {

            int cf = index[i - 1];
            while (pattern.charAt(cf + 1) != pattern.charAt(i) && cf >= 0) cf = index[cf];
            if (pattern.charAt(cf + 1) == pattern.charAt(i)) index[i] = cf + 1;
            else index[i] = -1;
        }
        return index;
    }

    public static int kmpFind(String target, String pattern) {
        int posP = 0;
        int posT = 0;
        int lenP = pattern.length();
        int lenT = target.length();
        int[] index = getFail(pattern);
        while (true) {
            while (posT < lenT && posP < lenP && target.charAt(posT) == pattern.charAt(posP)) {
                ++posT;
                ++posP;
            }
            if (posP == lenP) {
                return posT - lenP;
            }
            if (posT == lenT) return -1;
            if (posP == 0) ++posT;
            else
                posP = index[posP - 1] + 1;


        }
    }


    public static void main(String[] args) {
        //字符串从左开始1
        System.out.println(kmpFind("acabaabaabcacaabc", "abaabcac"));
    }
}
 

 

 

  • 大小: 816.4 KB
  • 大小: 2 MB
  • 大小: 2.1 MB
分享到:
评论

相关推荐

    基于GPU加速的快速字符串匹配算法.pdf

    传统的字符串匹配算法如KMP、Shift-And、BM和BDM等虽然理论上有较高的效率,但在实际应用中并不总是表现出最优性能。例如,在普通文本文件中,Boyer-Moore(BF)算法可能比KMP算法运行得更快,尽管KMP的时间复杂度更...

    KMP算法.zip

    常见的字符串匹配算法包括暴力匹配、KMP算法、Boyer-Moore算法等。 这些是计算机科学中常见的算法类型,每种算法都有不同的应用场景和解决问题的方法。在实际编程中,选择合适的算法对于提高程序效率和性能至关重要...

    字符串模式匹配算法[集合][精华]

    - **模式匹配**:是指在一个字符串(主串)中查找一个特定的子串(模式串)的过程,目的是确定模式串是否存在于主串中以及其出现的位置。 2. **算法分类** - **精确匹配算法**:如KMP算法、Boyer-Moore算法、...

    二分查找算法.zip

    常见的字符串匹配算法包括暴力匹配、KMP算法、Boyer-Moore算法等。 这些是计算机科学中常见的算法类型,每种算法都有不同的应用场景和解决问题的方法。在实际编程中,选择合适的算法对于提高程序效率和性能至关重要...

    kmp算法-基于C语言实现的kmp模式匹配算法.zip

    KMP(Knuth-Morris-Pratt)算法是一种在文本串中高效地查找模式串的字符串匹配算法。它由D.E. Knuth、V. Morris和J.H. Pratt于1970年提出,主要用于解决计算机科学中的字符串处理问题。在C语言中实现KMP算法,可以...

    字符串的查找

    总的来说,理解和掌握字符串查找的原理及算法是编程能力的重要组成部分,它能帮助我们有效地处理和分析文本数据,提升软件的性能和用户体验。在实际项目中,我们应当根据具体场景灵活运用这些知识,以实现最优的解决...

    数据结构-字符串.pptx

    4. **KMP算法**:是一种高效的字符串匹配算法,能够在O(n)时间内找出在一个文本串中是否存在指定的模式串。KMP算法避免了不必要的回溯,提高了查找效率。 5. **Huffman编码**:是数据压缩的一种方法,通过构建最优...

    二叉查找树算法.zip

    常见的字符串匹配算法包括暴力匹配、KMP算法、Boyer-Moore算法等。 这些是计算机科学中常见的算法类型,每种算法都有不同的应用场景和解决问题的方法。在实际编程中,选择合适的算法对于提高程序效率和性能至关重要...

    KMP算法深度解析:字符串匹配的高效之旅

    7. **字符串处理问题**:如模式匹配、字符串反转等。 8. **数学问题**:涉及数学运算和逻辑的算法问题。 解决算法题通常需要对问题进行分析,选择合适的算法或数据结构,并编写出高效、清晰的代码。在面试、编程...

    查找字符串

    尤其在长字符串查找中表现优秀。 6. **KMP算法**:同样是一种滑动窗口的算法,通过预处理得到模式串的next数组,避免了重复匹配已匹配过的字符,提高了查找速度。 在实际应用中,选择哪种查找算法取决于具体场景。...

    各种排序与字符串匹配的例子

    在IT领域,排序和字符串匹配是两个非常基础且重要的概念,广泛应用于数据处理、文本分析、算法设计等多个方面...无论是排序算法的选择还是字符串匹配策略的制定,都需要结合具体问题和性能需求,以达到最优的解决方案。

    贪心算法.zip

    常见的字符串匹配算法包括暴力匹配、KMP算法、Boyer-Moore算法等。 这些是计算机科学中常见的算法类型,每种算法都有不同的应用场景和解决问题的方法。在实际编程中,选择合适的算法对于提高程序效率和性能至关重要...

    单链表算法.zip

    常见的字符串匹配算法包括暴力匹配、KMP算法、Boyer-Moore算法等。 这些是计算机科学中常见的算法类型,每种算法都有不同的应用场景和解决问题的方法。在实际编程中,选择合适的算法对于提高程序效率和性能至关重要...

    递归算法.zip

    常见的字符串匹配算法包括暴力匹配、KMP算法、Boyer-Moore算法等。 这些是计算机科学中常见的算法类型,每种算法都有不同的应用场景和解决问题的方法。在实际编程中,选择合适的算法对于提高程序效率和性能至关重要...

    二叉树算法.zip

    常见的字符串匹配算法包括暴力匹配、KMP算法、Boyer-Moore算法等。 这些是计算机科学中常见的算法类型,每种算法都有不同的应用场景和解决问题的方法。在实际编程中,选择合适的算法对于提高程序效率和性能至关重要...

    分治算法.zip

    常见的字符串匹配算法包括暴力匹配、KMP算法、Boyer-Moore算法等。 这些是计算机科学中常见的算法类型,每种算法都有不同的应用场景和解决问题的方法。在实际编程中,选择合适的算法对于提高程序效率和性能至关重要...

    剪枝算法.zip

    常见的字符串匹配算法包括暴力匹配、KMP算法、Boyer-Moore算法等。 这些是计算机科学中常见的算法类型,每种算法都有不同的应用场景和解决问题的方法。在实际编程中,选择合适的算法对于提高程序效率和性能至关重要...

Global site tag (gtag.js) - Google Analytics