找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 330|回复: 0

Knuth-Morris-Pratt算法

[复制链接]

70

主题

11

回帖

286

积分

管理员

积分
286
发表于 2025-2-5 19:54:52 | 显示全部楼层 |阅读模式
Knuth-Morris-Pratt算法也就是大家常听到的KMP算法。
如果直接比较文本,如果很多部分与被查部分匹配,算法可能会很慢。KMP采用移位表改进了这种情况。
Knuth-Morris-Pratt 算法的思想是移位表的计算,它为我们提供了应该在其中搜索候选模式的信息.
该算法的时间复杂度为O(m+n)
[color=var(--hltools-color)][size=1.15em]JAVA


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public static int KnuthMorrisPrattSearch(char[] pattern, char[] text) {
    int patternSize = pattern.length;
    int textSize = text.length;

    int i = 0, j = 0;

    int[] shift = KnuthMorrisPrattShift(pattern);

    while ((i + patternSize) <= textSize) {
        while (text[i + j] == pattern[j]) {
            j += 1;
            if (j >= patternSize)
                return i;
        }

        if (j > 0) {
            i += shift[j - 1];
            j = Math.max(j - shift[j - 1], 0);
        } else {
            i++;
            j = 0;
        }
    }
    return -1;
}

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|软件开发

GMT+8, 2025-8-27 16:14 , Processed in 0.120743 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表