青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

bon

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  46 Posts :: 0 Stories :: 12 Comments :: 0 Trackbacks

常用鏈接

留言簿(2)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

重新看了KMP算法,有了新的理解。主要參考資料/Files/bon/kmp2.pdf

附件里說得很好,跟傳統的教程不同。
首先定義串s的前綴s',空串也是s的前綴,還有一個定義叫做proper prefix:s'是s的proper prefix等價于s'是s的prefix且s' != s,這個定義對于理解KMP有著關鍵的作用。同樣可以定義對應的后綴以及proper suffix。

下面假設模式串為s,被匹配的串為t,且第0個字符是串的第一個字符。

KMP的精髓在于計算next數組(附件里為pi數組)。next[i]=k,k<i(注意這里不取等號,想想為什么),s[0...k]是s的proper prefix,也是s[0...i]的proper suffix,且k是最大的(即不存在l>k,s[0...l]是s[0...i]的proper prefix且是s[0...i]的proper suffix)。

那么next[0]=-1就很自然地被理解:表示的是空串是s[0...0]的proper prefix且是s[0...0]的proper suffix。
另外k嚴格小于i也可以理解:若k==i,但s[0...i]不是s[0...i]的proper prefix 也不是proper suffix,這跟定義沖突。

上述可以用下圖來說明。


上面的式子定義了next數組,但還沒有指出怎么計算next。假設next[0...i]已經計算出來了,next[i+1]怎么算。
這里用的是動態規劃的思想。設s[0...k+1]是s[0...i+1]最長的proper prefix且是proper suffix,k<i,則明顯地s[0...k+1]符合以下性質:

1. s[0...k]是s[0...i]的proper prefix (這一點很明顯,由于k<i)
2. 且s[0...k]是s[0...i]的proper suffix (若不然,s[0...k+1]肯定無法組成s[0...i+1]的suffix)
3. 且s[k+1]==s[i+1]。

因此我們的任務就是找到這樣一個k。而s[0...k]是s[0...i]的proper prefix 和proper suffix這個性質使得我們可以利用已計算的next[0...i]來找k。

找的過程實質就是找到s[0...i+1]一個最長的proper prefix s[0...k], 這個prefix 同時是s[0...i+1]的proper suffix且有s[i+1]==s[k+1],見下圖:

假設s[0...kx]都是s[0...i+1]的proper prefix,且都是s[0...i]的proper suffix。設s[k1+1] != s[i+1],則s[0...k1+1]不可能是s[0...i+1]的proper suffix。
設s[k2+1] = = s[k3+1] = = s[i+1],但由于k3>k2,所以next[i+1] = k3+1

下面看poj上的一道題目的代碼:
 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 char w[10001],t[1000001];
 6 int n;
 7 int next[10001];
 8 
 9 int main()
10 {
11     scanf("%d",&n);
12     while(n--){
13         scanf("%s",w);
14         scanf("%s",t);
15         // process w
16         int wLength = strlen(w);
17         next[0]=-1;
18         int i=1;
19         int p;
20         while(i<wLength){
21             p=next[i-1];
22             while(p!=-1 && w[p+1]!=w[i]) p=next[p];
23             if(w[p+1]==w[i]) next[i]=p+1;
24             else next[i]=-1;
25             i++;
26         }
27         //for(i=0;i<wLength;i++) printf("%d",next[i]);
28         //printf("\n");
29         // matching
30         int j=-1,cnt=0;
31         i=-1;
32         int tLength = strlen(t);
33         while(j<tLength){
34             if(t[j+1]==w[i+1]){
35                 i++;
36                 j++;
37                 if(i==wLength-1){
38                     cnt++;
39                     i=next[i];
40                 }
41             }else{
42                 if(i==-1) j++;
43                 else i=next[i];
44             }
45         }
46         printf("%d\n",cnt);
47     }
48     return 1;
49 }
50 


posted on 2008-07-25 11:45 bon 閱讀(419) 評論(0)  編輯 收藏 引用 所屬分類: Programming Contest

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


Google PageRank 
Checker - Page Rank Calculator
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品久久久久婷婷| 午夜视频在线观看一区二区三区 | 怡红院精品视频| 国产日韩在线看| 国产一区二区视频在线观看| 国产日韩欧美一区二区三区在线观看| 国产精品人人做人人爽| 国产欧美日韩视频在线观看| 韩国精品在线观看| 亚洲黑丝在线| 亚洲视频在线二区| 欧美一区二区三区在线视频 | 久久综合九九| 亚洲国产综合在线| 欧美日韩高清不卡| 另类春色校园亚洲| 久久se精品一区二区| 在线一区二区视频| 日韩小视频在线观看| 亚洲区中文字幕| 日韩视频精品| 日韩视频一区二区三区在线播放 | 亚洲欧美另类综合偷拍| 欧美亚洲日本一区| 欧美久久婷婷综合色| 国产亚洲欧美一级| 亚洲乱码国产乱码精品精| 午夜精品影院| 亚洲人成人一区二区三区| 亚洲欧美www| 欧美人与禽猛交乱配视频| 国内外成人在线视频| 亚洲图色在线| 亚洲国产另类久久久精品极度 | 欧美mv日韩mv国产网站| 国产精品区一区二区三区| 亚洲福利视频二区| 久久久国产精品一区| 一区二区三区久久网| 欧美国产视频日韩| 亚洲国产精品免费| 久久久久久日产精品| 亚洲一区免费| 国产精品成人一区二区三区吃奶| 亚洲国产视频一区| 老**午夜毛片一区二区三区| 亚洲字幕在线观看| 国产精品www| 99精品99| 亚洲激情国产| 欧美成人中文字幕在线| 在线观看91精品国产入口| 欧美在线资源| 亚洲免费视频观看| 国产精品va在线| 亚洲无限av看| 99天天综合性| 国产精品国产三级国产aⅴ浪潮| 99re国产精品| 99re6这里只有精品| 欧美日韩精品伦理作品在线免费观看| 亚洲日本中文字幕区| 精品99视频| 亚洲美女毛片| 亚洲婷婷综合久久一本伊一区| 欧美久久久久久久久久| 亚洲日本精品国产第一区| 亚洲激情视频在线| 国产精品v亚洲精品v日韩精品| 亚洲影院在线| 亚洲三级观看| 欧美成人免费观看| 国产精品福利片| 亚洲欧美国产制服动漫| 一级日韩一区在线观看| 欧美插天视频在线播放| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产精品sss| 在线一区日本视频| 国产欧美一区二区三区久久人妖| 亚洲一二三四区| 亚洲网友自拍| 国产一区成人| 欧美激情视频一区二区三区免费| 欧美交受高潮1| 午夜精品视频一区| 久久精品视频在线看| 亚洲美女啪啪| 亚洲一区二区三区国产| 狠狠色噜噜狠狠色综合久| 亚洲国产高清在线观看视频| 欧美日韩一区二区三区视频| 性色av一区二区三区在线观看 | 国产一区二区三区久久久| 久久综合狠狠综合久久综青草| 久久网站免费| 中文在线一区| 久久精品二区三区| 亚洲美女av黄| 久久国产欧美精品| 一区二区国产日产| 媚黑女一区二区| 麻豆国产精品777777在线 | 在线观看日韩| 夜夜爽99久久国产综合精品女不卡| 国产精品一区免费视频| 欧美freesex8一10精品| 国产精品豆花视频| 欧美成人一区二区三区在线观看| 欧美三区在线视频| 欧美激情91| 亚洲日本乱码在线观看| 欧美一区二区三区啪啪| 亚洲美女视频在线观看| 久久九九热免费视频| 亚洲影院色无极综合| 欧美成人亚洲| 免费亚洲电影在线| 国产亚洲精品久久久久婷婷瑜伽 | 欧美日韩精品一区二区| 免费在线看一区| 国产精品人人做人人爽| 亚洲精品在线免费| 亚洲国产精品www| 久久精品成人一区二区三区| 亚洲欧美激情视频在线观看一区二区三区| 久久综合九色99| 欧美r片在线| 在线看日韩欧美| 久久久久久穴| 欧美1区2区| 影音先锋另类| 久久一区二区三区超碰国产精品| 久久全国免费视频| 国产一区二区黄| 欧美在线观看视频| 久久久一区二区| 一区二区三区亚洲| 久久三级视频| 欧美黄色影院| 亚洲精品在线视频观看| 欧美国产日韩在线| 夜夜嗨av一区二区三区四季av| 99伊人成综合| 欧美日韩一区二区视频在线观看| 亚洲免费观看在线观看| 亚洲尤物在线| 国产日韩精品一区二区| 欧美一级久久久| 欧美在线地址| 狠狠色香婷婷久久亚洲精品| 裸体丰满少妇做受久久99精品| 久久影视三级福利片| 在线日韩中文| 欧美理论片在线观看| 一区二区三区久久精品| 亚洲综合精品一区二区| 国产女主播视频一区二区| 久久久久国产精品午夜一区| 亚洲风情亚aⅴ在线发布| 在线视频你懂得一区二区三区| 欧美三级视频在线播放| 翔田千里一区二区| 你懂的一区二区| 99这里只有久久精品视频| 欧美日韩中文精品| 欧美在线一级va免费观看| 欧美成人免费网| 亚洲一区二区三区精品在线观看 | 99视频精品| 国产精品视频精品| 久久久久久久综合日本| 日韩视频二区| 欧美在现视频| 欧美日韩精品免费观看视一区二区| 国产麻豆日韩| 亚洲天堂av电影| 99精品久久| 欧美午夜精彩| 9国产精品视频| 一本色道久久综合亚洲91| 国产精品久久久久av| 亚洲一级免费视频| 久久裸体艺术| 久久综合九色综合欧美狠狠| 欧美—级在线免费片| 亚洲女人小视频在线观看| 欧美成人三级在线| 欧美一区二区三区视频免费播放| 亚洲人人精品| 国产色爱av资源综合区| 欧美日韩成人一区二区| 欧美在线免费一级片| 在线一区二区三区做爰视频网站| 免费观看久久久4p| 欧美在线3区| 亚洲永久字幕| 亚洲视频一区二区在线观看| 亚洲精品久久久久久久久久久久 | 欧美日一区二区三区在线观看国产免|