串的模式匹配算法

bf算法,需要对主串进行回溯;kmp算法,去掉了回溯过程,更为快速.(以下代码的next算法还需优化)

#include 
#include 
#include 
#include 
#define MAXSIZE 20
/*
    串的模式匹配算法:BF朴素模式匹配、KMP(三个提出者的名字首字母)模式匹配算法
*/


//BF模式匹配算法
int indexBF(char s[],char t[]){
    for (int i=0;i<=strlen(s)-strlen(t);i++){
        for(int j=0,k=i;j0){
                    j-=k;
                }
                k=0;
            }
        }
        next[i+1]=k+1;
    }
    return next;
}

//kmp算法:字串(模式串)中重复的较多时有优势,O(m+n),不回溯
int indexKMP(char s[],char t[]){
    int *next=getNext(t);
    int j=0;
    int i=0;
    for (;i=strlen(t)){
        return i-strlen(t);
    }
    return -1;
}

int main(){
    char s[]="BBCABCDABABCDABCDABDE";
    char t[]="ABCDABD";
    clock_t start = clock();
    printf("kmp第一次匹配的下标:%d\n",indexKMP(s,t));
    clock_t t1 = clock();
    double duration = (double)(t1 - start) / CLOCKS_PER_SEC * 1000;
    printf("1time:%.3f\n",duration);
    printf("bf第一次匹配的下标:%d\n",indexBF(s,t));
    clock_t t2 = clock();
    duration = (double)(t2 - t1) / CLOCKS_PER_SEC * 1000;
    printf("2time:%.3f\n",duration);
    return 0;
}

你可能感兴趣的:(数据结构与算法实现-C语言,算法,数据结构,模式匹配,串,kmp)