<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++

    主站蜘蛛池模板: 99久久免费看国产精品| 国产黄在线播放免费观看| 69免费视频大片| 国产av天堂亚洲国产av天堂| 久久久久国色AV免费观看| 亚洲乱码中文字幕综合234| 添bbb免费观看高清视频| 四虎免费影院4hu永久免费| 国产精品亚洲а∨无码播放不卡| 免费观看一级毛片| 国产精品亚洲综合一区在线观看 | 亚洲Av无码乱码在线观看性色 | 免费人人潮人人爽一区二区 | 热re99久久6国产精品免费| 久久亚洲AV无码精品色午夜麻| 最近更新免费中文字幕大全| 亚洲av无码专区国产乱码在线观看| 成人黄网站片免费视频| 久久亚洲精品无码aⅴ大香| 国产成在线观看免费视频| 亚洲av永久无码天堂网| yy6080亚洲一级理论| 精品无码一级毛片免费视频观看| 国产aⅴ无码专区亚洲av| 91免费在线播放| 亚洲精品无码av片| 亚洲精品美女久久久久99小说| 99免费在线视频| 亚洲成av人片不卡无码| 国产成人精品高清免费| 久久久久久噜噜精品免费直播| 亚洲伊人tv综合网色| 在线观看成人免费| 国产高潮久久免费观看| 久久av无码专区亚洲av桃花岛| 成人人免费夜夜视频观看| 国产精品1024在线永久免费| 麻豆亚洲av熟女国产一区二| 日本一道高清不卡免费| 最近中文字幕免费大全| 国产精品亚洲一区二区麻豆|