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

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>
            日韩亚洲欧美在线观看| 亚洲视频一二| 99视频一区二区三区| 国产综合在线视频| 久久久久国产精品一区三寸| 激情五月综合色婷婷一区二区| 国产欧美日韩在线| 欧美色图麻豆| 国产日本欧美视频| 在线日韩av| 欧美亚洲免费高清在线观看| 久久er99精品| 亚洲欧洲综合另类| 日韩视频一区二区在线观看| 国产精品视频专区| 欧美日韩国产免费| 欧美风情在线观看| 国产午夜精品一区二区三区欧美| 欧美日韩一级黄| 激情成人中文字幕| 亚洲国产视频一区| 性娇小13――14欧美| 欧美激情一区| 欧美专区日韩专区| 玖玖视频精品| 欧美 日韩 国产在线| 欧美日韩影院| 国产精品综合久久久| 亚洲一区二区欧美日韩| 欧美一级片一区| 香蕉成人伊视频在线观看| 久久精品成人一区二区三区| 欧美激情偷拍| 久久激情综合网| 国产日韩精品久久久| 在线亚洲一区二区| 久久九九99| 亚洲欧美日韩精品综合在线观看| 久久偷窥视频| 国产午夜精品久久久| 欧美主播一区二区三区| 洋洋av久久久久久久一区| 欧美高清视频一二三区| 亚洲经典三级| 久久久久久久久久久久久女国产乱| 亚洲免费在线视频一区 二区| 欧美在线观看www| 久久精品国产亚洲a| 激情五月综合色婷婷一区二区| 性欧美精品高清| 免费一级欧美片在线播放| 亚洲精选91| 亚洲影院色在线观看免费| 国内精品免费在线观看| 欧美电影免费观看| 欧美 日韩 国产精品免费观看| 宅男噜噜噜66国产日韩在线观看| 亚洲淫片在线视频| 亚洲另类在线视频| 亚洲国产婷婷综合在线精品| 欧美电影免费观看高清| 国产一区二区三区免费不卡| 亚洲欧美伊人| 99国产精品久久久久老师| 亚洲国产日韩欧美在线99 | 国产欧美一区二区三区另类精品| 久久福利视频导航| 欧美极品一区| 欧美成人激情视频| 国产精品视频yy9099| 一区二区三区精品视频| 亚洲一区免费看| 欧美午夜精品理论片a级大开眼界 欧美午夜精品理论片a级按摩 | 亚洲国产黄色片| 午夜一区不卡| 99精品国产高清一区二区| 国产美女精品在线| 亚洲一区二区三区在线观看视频| 一区二区三区av| 国产精品久久久久久久9999| 裸体女人亚洲精品一区| 国产嫩草一区二区三区在线观看 | 亚洲免费观看高清完整版在线观看| 国一区二区在线观看| 欧美在线日韩精品| 免费在线观看精品| 99精品视频免费全部在线| 欧美日韩国产在线播放| 中文在线一区| 亚洲性av在线| 美女黄色成人网| 亚洲精品日韩综合观看成人91| 99国产精品久久久久久久成人热| 欧美激情中文不卡| 久久精品国产99| 亚洲毛片av| 免费av成人在线| 亚洲一区二区三区四区中文| 一区二区三区在线视频播放| 国产精品久久久对白| 久久人人爽人人| 亚洲欧美资源在线| 日韩写真视频在线观看| 毛片av中文字幕一区二区| 在线观看亚洲视频| 欧美国产一区二区| 欧美一级视频一区二区| 亚洲线精品一区二区三区八戒| 久久久精品国产免大香伊| 99视频精品全部免费在线| 亚洲电影第1页| 在线看国产日韩| 中文一区在线| 亚洲大黄网站| 欧美一二区视频| 在线中文字幕不卡| 激情av一区二区| 国产一区二区三区高清播放| 欧美日韩系列| 国产精品欧美经典| 国产欧美日韩| 国产九九精品视频| 国产精品亚洲产品| 国产精品视区| 国内精品国产成人| 亚洲国产精品久久久久婷婷老年| 国产欧美日韩综合精品二区| 国产情侣久久| 伊人成人在线视频| 日韩一区二区电影网| 亚洲午夜在线| 午夜欧美不卡精品aaaaa| 久久九九精品99国产精品| 欧美成人免费小视频| 99一区二区| 久久亚洲综合色| 欧美午夜精品久久久久久超碰| 国产精品久久一卡二卡| 国产亚洲激情视频在线| 久久久综合精品| 日韩亚洲视频| 亚洲国产成人不卡| 亚洲毛片在线看| 久久天堂av综合合色| 午夜亚洲激情| 夜久久久久久| 国产日韩精品一区二区| 欧美视频一区二区在线观看 | 国产精品日韩一区二区| 一本久道久久综合婷婷鲸鱼| 香港久久久电影| 99riav1国产精品视频| 韩国v欧美v日本v亚洲v| 国产精品天天摸av网| 激情成人在线视频| 欧美日韩国产页| 亚洲免费在线播放| 99国产精品自拍| 欧美电影在线| 一本久道久久综合狠狠爱| 99ri日韩精品视频| 另类欧美日韩国产在线| 久久精品中文字幕一区二区三区| 久久视频在线视频| 欧美在线国产| 国产精品日韩精品| 亚洲一区高清| 亚洲看片一区| 老色鬼久久亚洲一区二区| 激情久久婷婷| 欧美一区亚洲一区| 老司机成人网| 亚洲黄色一区| 亚洲午夜精品久久| 亚洲一区二区三区激情| 国产精品高清在线| 久久久免费av| 欧美另类videos死尸| 久久国产精品72免费观看| 久久躁狠狠躁夜夜爽| 亚洲九九九在线观看| 性色一区二区| 99国产精品| 日韩亚洲一区在线播放| 国产精品一区免费观看| 久久尤物电影视频在线观看| 欧美精品久久久久久久久老牛影院| 国产精品theporn| 免费欧美高清视频| 欧美高清自拍一区| 欧美一区二区三区免费视| 欧美日韩国产成人高清视频| 暖暖成人免费视频| 狠狠做深爱婷婷久久综合一区| 日韩一级在线| 亚洲精品国产精品久久清纯直播 | 欧美顶级艳妇交换群宴| 欧美精品尤物在线| 欧美大片在线观看一区二区| 狠狠综合久久|