<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    一江春水向東流

    做一個(gè)有思想的人,期待與每一位熱愛思考的人交流,您的關(guān)注是對(duì)我最大的支持。

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      44 隨筆 :: 139 文章 :: 81 評(píng)論 :: 0 Trackbacks

    KMP算法的關(guān)鍵是根據(jù)給定的模式串W[1,m],定義一個(gè)next函數(shù)。next函數(shù)包含了模式串本身局部匹配的信息。
    ?? KMP算法的基本思想是:假設(shè)在模式匹配的進(jìn)程中,執(zhí)行T[i]和W[j]的匹配檢查。若T[i]=W[j],則繼續(xù)檢查T[i+1]和W[j+1]是否匹配。若T[i]<>W[j],則分成兩種情況:若j=1,則模式串右移一位,檢查T[i+1]和W[1]是否匹配;若1<j<=m,則模式串右移j-next(j)位,檢查T[i]和W[next(j)]是否匹配。重復(fù)此過程直到j(luò)=m或i=n結(jié)束。

    /**************************************
    ?*
    ?*? KMP字符串匹配算法
    ?*
    ?*
    ?**************************************/
    #include <stdio.h>
    #include <string.h>
    int next[10];
    void getnext(char *p)
    {
    ?int idx_p, len_p, k;
    ?
    ?idx_p = 0;
    ?len_p = strlen(p);
    ?k = -1;
    ?next[0] = -1;
    ?
    ?while(idx_p < len_p -1)
    ?{
    ? if ((k == -1) || *(p+idx_p) == *(p+k))
    ? {
    ?? idx_p = idx_p + 1;
    ?? k = k + 1;
    ?? next[idx_p] = k;
    ? }
    ? else
    ? {
    ?? k = next[k];
    ? }
    ?}
    }
    int kmp(char *s, char *p)
    {
    ?int len_p, len_s, idx_p, idx_s;
    ?
    ?len_p = strlen(p);
    ?len_s = strlen(s);
    ?idx_p = idx_s = 0;
    ?
    ?while ((idx_p < len_p) && (idx_s < len_s))
    ?{
    ? /* 字符匹配或者要比較p中的第一個(gè)字符 */
    ? if ((idx_p == -1) || *(p+idx_p) == *(s+idx_s))
    ? {
    ?? idx_p = idx_p + 1; idx_s = idx_s +1;
    ? }
    ? else
    ? {
    ?? idx_p = next[idx_p];
    ? }
    ?}
    ?if (idx_p >= len_p)
    ?{
    ? return (idx_s - len_p);
    ?}
    ?else
    ?{
    ? return -1;
    ?}
    }
    int main()
    {
    ?int pos, i;
    ?char s[50] = "abaaaabcabcacb";
    ?char p[10] = "aaaabca";
    ?
    ?getnext(p);
    ?if ((pos = kmp(s, p)) == -1)
    ?{
    ? fprintf(stderr, "String \"%s\" doesn't contain Pattern \"%s\"!\n", s, p);
    ?}
    ?else
    ?{
    ? printf("String \"%s\" contains Pattern \"%s\".\n The position of fisrt occur is %d\n", s, p, pos);
    ? printf("%s\n", s);
    ? for (i = 0; i < pos; i++)
    ?? printf(" ");
    ? printf("%s\n", p);
    ?}
    ?return 0;
    }

    posted on 2007-04-29 15:52 allic 閱讀(1278) 評(píng)論(0)  編輯  收藏 所屬分類: 算法及數(shù)據(jù)結(jié)構(gòu)
    主站蜘蛛池模板: 久久久精品国产亚洲成人满18免费网站| 亚洲91精品麻豆国产系列在线| 香蕉国产在线观看免费| 国内精品免费视频自在线| 中文字幕亚洲综合小综合在线| 美女视频黄是免费的网址| 亚洲成a人片在线网站| 黄+色+性+人免费| 亚洲a∨无码男人的天堂| 国产成人A在线观看视频免费| 亚洲不卡中文字幕| 嘿嘿嘿视频免费网站在线观看| 亚洲精品美女网站| 国产免费观看a大片的网站| 久久亚洲AV成人无码国产电影| 亚洲av无码成人精品区| 中文字幕高清免费不卡视频| 久久亚洲国产午夜精品理论片| 99re视频精品全部免费| 亚洲综合激情五月色一区| 免费播放春色aⅴ视频| 国产一级a毛一级a看免费视频 | 亚洲一区二区三区免费视频| 一二三四在线观看免费高清中文在线观看| 涩涩色中文综合亚洲| 国产一区二区三区免费看| 中文字幕免费观看视频| 亚洲高清无在码在线无弹窗| 夜夜爽免费888视频| 巨胸狂喷奶水视频www网站免费| 亚洲男人都懂得羞羞网站| 久久WWW色情成人免费观看| jizz在线免费播放| 亚洲日本香蕉视频| 亚洲第一区精品日韩在线播放| 久久国产精品萌白酱免费| 亚洲AV性色在线观看| 亚洲av午夜福利精品一区| 最近中文字幕无免费视频| 精品免费久久久久国产一区| 亚洲制服丝袜中文字幕|