分享

kmp算法代码示例

 海漩涡 2016-04-16

//kmp_algorithm.c
#include "kmp_algorithm.h"


// ?ónextoˉêy?μ
void get_next(char T[], int strLen, int next[])
{
    int i = 1, j = 0;

    next[1] = 0;
    j = 0;
    while(i <= strLen)
    {
        if(0 == j || T[i] == T[j])
        {
            ++i;
            ++j;
            next[i] = j;
        }
        else
        {
            j = next[j];
        }
    }
}

/*
à?ó??£ê?′?Tμ?nextoˉêy?óT?ú?÷′?S?Dμúpos??×?·???oóμ?????μ?KMP??·¨
D£?1 <= pos <= strlen(S)
*/
// ·μ??T?úS?Dμ??eê?????
int KMP_algorithm(char S[], int S_len, char T[], int T_len, int pos)
{
    int i = pos;
    int j = 1;
    int next[MAX_NEXT];

    get_next(T, T_len, next);
    while(i < S_len && j < T_len)
    {
        if(0 == j || S[i] == T[j])
        {            
            ++i;
            ++j;
        }
        else
        {           
            j = next[j];
        }
    }    
    return (i - j);
}

========================================================================

// kmp_algorithm.h
#ifndef _KMP_ALGORITHM_H_
#define _KMP_ALGORITHM_H_


#include <stdio.h>

#define MAX_NEXT 1024*1024

/*
    ′?μ??£ê??¥??£??óμúò???×?·?′??úμú?t??×?·?′??Dμ?????
*/
int KMP_algorithm(char S[], int S_len, char T[], int T_len, int pos);

#endif

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多