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

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

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

    so true

    心懷未來,開創未來!
    隨筆 - 160, 文章 - 0, 評論 - 40, 引用 - 0
    數據加載中……

    KMP的改進算法之二

    /*該篇文章所描述的方法是在《KMP改進算法之一》的基礎上產生的,此篇文章主要擴展了KMP算法對于不能處理的如下情況:
    主串:abcabcabd
    子串:abcab
    原先的KMP算法的結果:只能發現一處,即在開始部分匹配到的abcab;
    改進后的KMP算法,可以發現兩處:
    開頭位置的abcabcabd,和中間部分的abcabd。

    */

    #include <iostream>
    using namespace std;

    struct Pair{
     Pair(int i,int v):index(i),value(v),next(NULL){}
     int index;
     int value;
     Pair* next;
    };
    void getNext(char *match, int next[], int len, int *ev=NULL){
     Pair *phead=NULL;
     next[0]=-1;
     for(int j=1,k;j<=len;j++){//多了一步j==len
      k=next[j-1];
      while(k>-1 && match[k]!=match[j-1])k=next[k];
      if(j==len){//將j==len時得到的結果存入到ev之中
       if(ev!=NULL)
        *ev=k+1;
       break;
      }
      next[j]= k+1;
      
      while(k>-1 && match[j]==match[k+1])k=next[k];
      
      if(next[j]!=k+1){
       Pair *p=new Pair(j,k+1);
       p->next=phead;
       phead=p;
      }
     }
     while(phead!=NULL){
      next[phead->index]=phead->value;
      Pair *p=phead;
      phead=phead->next;
      delete p;
     }
    }

    void match_string(char * match, char* text){
     int len_match=strlen(match);
     int *pn=new int[len_match+1];//多了一個尾部結點
     getNext(match,pn,len_match,pn+len_match);//傳遞了尾部結點
     
     int j=0;
     while(*text!=0){
      if(*text==match[j]){
       text++;
       j++;
       if(j==len_match)
       {
        cout<<text-len_match<<endl;
        j=pn[j];//利用了插入到尾部的新結點
       }
      }else{
       j=pn[j];
       if(j==-1){
        text++;
        j=0;
       }
      }
     } 
     
     delete [] pn;
    }

    void main(){
     char *match="abcab";
     char *text="dfdabcabcabdd";
     match_string(match,text);
    }
    /*輸出結果:
    abcabcabdd
    abcabdd
    */

    posted on 2008-10-20 23:20 so true 閱讀(337) 評論(0)  編輯  收藏 所屬分類: C&C++

    主站蜘蛛池模板: 亚洲乱码精品久久久久..| 亚洲熟妇无码爱v在线观看| 亚洲色最新高清av网站| 免费人成大片在线观看播放| aa级女人大片喷水视频免费| 日韩人妻无码精品久久免费一| 老司机永久免费网站在线观看| 亚洲午夜精品一区二区麻豆| 成人免费一区二区无码视频| 亚洲国产综合精品中文第一| 女人让男人免费桶爽30分钟| 亚洲国产美女精品久久久| 国产在线98福利播放视频免费| 亚洲av纯肉无码精品动漫| 国产一区在线观看免费| sss在线观看免费高清| 成人在线免费观看| 亚洲国产精品成人AV在线| 日产国产精品亚洲系列| 亚洲黄色中文字幕| 婷婷亚洲综合五月天小说在线| 国产香蕉免费精品视频| 国产亚洲精品精品国产亚洲综合| 精品国产福利尤物免费| 亚洲电影国产一区| 国产桃色在线成免费视频| 亚洲AV成人一区二区三区AV| 亚洲免费二区三区| 久久国产亚洲精品麻豆| 永久免费在线观看视频| 亚洲AV无码国产精品麻豆天美 | 伊人久久国产免费观看视频| 亚洲色欲久久久综合网东京热 | 亚洲国产精品午夜电影| 成人网站免费看黄A站视频| 中文字幕亚洲第一在线| 国产美女无遮挡免费视频| 国产午夜精品久久久久免费视| 99亚偷拍自图区亚洲| 亚洲综合另类小说色区| 国产日韩久久免费影院|