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

bon

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

常用鏈接

留言簿(2)

我參與的團(tuán)隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

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

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

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

KMP的精髓在于計算next數(shù)組(附件里為pi數(shù)組)。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嚴(yán)格小于i也可以理解:若k==i,但s[0...i]不是s[0...i]的proper prefix 也不是proper suffix,這跟定義沖突。

上述可以用下圖來說明。


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

1. s[0...k]是s[0...i]的proper prefix (這一點(diǎn)很明顯,由于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]。

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

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

假設(shè)s[0...kx]都是s[0...i+1]的proper prefix,且都是s[0...i]的proper suffix。設(shè)s[k1+1] != s[i+1],則s[0...k1+1]不可能是s[0...i+1]的proper suffix。
設(shè)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 閱讀(424) 評論(0)  編輯 收藏 引用 所屬分類: Programming Contest

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   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>
            欧美好吊妞视频| 亚洲精品之草原avav久久| 亚洲天堂成人在线观看| 国产精品久久久久久久久搜平片| 99日韩精品| 一区二区欧美国产| 国产噜噜噜噜噜久久久久久久久| 午夜精品婷婷| 久久久久久网| 在线成人国产| 最新高清无码专区| 欧美图区在线视频| 欧美综合激情网| 欧美成人精品在线| 亚洲一区二区视频| 久久精精品视频| 亚洲国产精品传媒在线观看| 欧美高清视频www夜色资源网| 99精品欧美| 亚洲欧美制服中文字幕| 曰韩精品一区二区| 99在线热播精品免费99热| 国产美女精品视频免费观看| 久久一区二区三区四区| 欧美成人免费视频| 欧美一区二区视频97| 久热精品视频在线观看| 亚洲在线观看免费| 久久免费视频在线观看| 亚洲中午字幕| 免费亚洲婷婷| 欧美伊久线香蕉线新在线| 免费观看久久久4p| 久久精品成人一区二区三区| 欧美激情一区二区三区成人| 欧美中文字幕视频| 欧美剧在线观看| 米奇777在线欧美播放| 国产精品久久久久久妇女6080| 欧美.www| 国产一区二区三区在线观看精品 | 国产精品久久夜| 欧美成ee人免费视频| 国产精品久久91| 亚洲精品久久久久久久久久久久| 国产视频一区在线| 亚洲美女视频在线观看| 在线 亚洲欧美在线综合一区| 亚洲一区二区在线看| 日韩亚洲欧美精品| 老司机一区二区三区| 久久精品国产精品| 国产精品久久久久久久7电影| 亚洲国产欧美在线| 一区在线观看| 欧美在线视频免费| 欧美一区二区在线免费观看| 欧美日韩亚洲一区二区| 亚洲激情欧美| 亚洲精品欧美在线| 欧美14一18处毛片| 欧美xart系列高清| 亚洲国产精品热久久| 久久久久久国产精品mv| 久久蜜桃香蕉精品一区二区三区| 国产欧美日韩专区发布| 午夜久久久久久| 久久国产视频网站| 国内精品久久久久影院薰衣草| 午夜精品av| 久久婷婷综合激情| 在线观看中文字幕亚洲| 久久影视三级福利片| 牛牛国产精品| 亚洲毛片一区| 国产精品高潮呻吟久久av无限| 在线视频你懂得一区二区三区| 午夜精品福利视频| 国产欧美一区二区白浆黑人| 欧美在线在线| 欧美1区2区3区| 夜夜夜精品看看| 国产精品嫩草久久久久| 亚洲欧洲99久久| 免费日韩成人| 日韩一级不卡| 国产精品乱子久久久久| 久久成人精品电影| 欧美国产日韩一区二区| 一区二区日韩免费看| 国产精品综合| 久久只有精品| 在线综合亚洲欧美在线视频| 欧美在线观看www| 亚洲欧洲另类| 国产毛片精品视频| 蜜臀久久99精品久久久画质超高清 | 在线观看欧美| 欧美日韩国产bt| 性久久久久久久| 欧美国产精品日韩| 亚洲欧美日韩一区二区三区在线观看 | 亚洲欧洲日韩女同| 国产精品电影网站| 久久免费偷拍视频| 这里只有精品视频在线| 老牛影视一区二区三区| 中文精品视频| 亚洲电影在线观看| 国产精品久久久久久妇女6080| 久久国产一区二区三区| 亚洲裸体视频| 蜜桃久久精品乱码一区二区| 在线视频精品一| 在线观看国产日韩| 国产精品网站视频| 欧美高清视频一区| 久久精品成人| 午夜视频在线观看一区| 亚洲日韩视频| 欧美国产综合视频| 久久久蜜桃一区二区人| 亚洲视频免费看| 亚洲日本中文字幕区| 国产一级一区二区| 国产精品久久久久久久久免费| 欧美h视频在线| 久久国产一二区| 亚洲一区二区毛片| av成人老司机| 亚洲日本免费| 亚洲成人资源| 亚洲国产天堂久久综合网| 国产精品美女一区二区| 欧美激情一区二区三区高清视频 | 欧美一级精品大片| 亚洲社区在线观看| 99riav久久精品riav| 亚洲欧洲另类| 亚洲国产免费看| 亚洲国产成人av| 欧美激情免费在线| 欧美电影美腿模特1979在线看| 久久久伊人欧美| 久久免费高清| 麻豆精品在线视频| 久久亚洲免费| 美女精品国产| 欧美成人免费在线| 欧美激情aⅴ一区二区三区| 免费在线观看一区二区| 欧美成人日本| 亚洲国产三级网| 99re在线精品| 亚洲一级特黄| 亚欧成人精品| 久久影音先锋| 欧美乱妇高清无乱码| 欧美手机在线视频| 国产精品丝袜久久久久久app| 国产伦精品一区| 精品二区视频| 91久久综合| 亚洲尤物在线| 久久午夜视频| 亚洲国产精品久久久久秋霞蜜臀| 亚洲精选在线| 亚洲午夜未删减在线观看| 午夜日韩av| 久久亚洲综合网| 欧美天堂亚洲电影院在线播放| 国产精品免费区二区三区观看| 国产一区二区按摩在线观看| 在线免费高清一区二区三区| 99综合电影在线视频| 亚洲欧美日韩中文播放| 久热爱精品视频线路一| 亚洲狠狠丁香婷婷综合久久久| 一本一本久久a久久精品牛牛影视| 午夜激情综合网| 麻豆精品视频在线观看| 欧美色欧美亚洲高清在线视频| 国产欧美日韩专区发布| 亚洲欧洲精品一区二区三区 | 国产欧美日韩一区二区三区在线 | 国产精品嫩草影院一区二区| 国产亚洲欧美另类中文| 亚洲黄色成人| 欧美在线观看视频| 亚洲成人在线免费| 中文一区在线| 久久综合久色欧美综合狠狠| 欧美日韩国内| 亚洲第一狼人社区| 亚洲欧美精品在线| 亚洲国产精品黑人久久久| 亚洲尤物在线视频观看| 欧美ed2k| 在线高清一区| 久久精品欧美|