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

oyjpArt ACM/ICPC算法程序設計空間

// I am new in programming, welcome to my blog
I am oyjpart(alpc12, 四城)
posts - 224, comments - 694, trackbacks - 0, articles - 6

KMP算法淺析

Posted on 2006-10-10 21:29 oyjpart 閱讀(7484) 評論(3)  編輯 收藏 引用
KMP算法是由Knuth, Morris, Pratt三位牛人提出的快速匹配算法 得到了非常的廣泛的應用
鑒于最近教材正在學KMP算法 我在此對次算法進行一下簡略分析 不清楚的同學可以參考一下
//By Optimistic

說明:字符串查找中,被查找的叫做目標串,查找的叫模式串。如:
????????????目標串:T[] = 01001010100001 模式串 P[] = 1010
算法來源: 樸素的匹配效率太低。考慮改進:1.當模式串與目標串在i位置比較不同時,下一個應該從目標串的哪里開始比較?2。下一個應該從模式串的哪個開始比較?

于是經過一些簡單的邏輯推理 我們得到了KMP算法的思想 讓目標串沒有回溯 并且模式串盡可能向后滑動

我們用next[i]這個數組來存儲當模式串的第i位比較出現不匹配時 模式串的從哪里開始比較
比如next[i] = 2 相當于從從P[2]開始比較 如果next[i] = -1 代表模式串的第一個與目標串的下一個比較

KMP的算法的精華就在于對next[i]的求取,采用next[i-1]=>next[i]的方法求得next[i]的值
下面我們來看看next[i]的求取

string str;
cin >> str;
int * next =?new int[str.length()+1];
?int i = 0, j = -1;
?next[0] = -1;
?while(i < str.length())
?{
??while(j>=0 && str[i]!=str[j])
???j = next[j];
??i++;
??j++;
??if(str[i] == str[j]) //修正
???next[i] = next[j];
??else next[i] = j;
}

其中具體的細節其參考 我同寢室同學寫的KMP算法詳解:
http://www.shnenglu.com/warrior0032/archive/2006/10/10/13543.html

其中解釋了算法的基本思想和實現過程

我對此算法作幾個分析:
1。為什么要修正next[i]值?為什么只要修正一次?
當我們分析到模式串中的第i位于目標串不同時 求得應該從K位開始比較 但是如果第K位于第I位相同的時候 第K位一定與目標串也不同因此應該再次改成當K位比較不同時的NEXT值 即 NEXT[K]
由于NEXT是由左向右推出來的 所以只需修正一次 (數學歸納法?呵呵。。。)

2。程序沒有使用一個數組來保存未修正時的NEXT值 而直接用J來充當這個功能 但是J是由NEXT(已修正)得來的 那么有沒有可能J得不到正確的值?
這個問題最先是我自己想的 后來驗證了一下 J一定能夠得到正確的值
下面我們來分析一下
下標???????????????????????? 0? 1? 2? 3? 4? 5? 6? 7? 8? 9?10 11 1213
目標串???????????????????? 0? 1 ?0? 0 ?1? 0? 1? 0? 1? 0? 0?? 0?? 0??1
j(未修正的next)?????? -1 0? 0? 1? 1? 2? 3? 2? 3? 2? 3? ?4?? 1? 1
修正了的next????????? -1 0 -1? 1? 0?-1? 3 -1 3 -1? 0? 4?? 1?? 0

讓我們看看但模式串比較到了12位的時候(下標為11)
next[11] = 4; next[4] = 0; j|4 = 1...
這時候next[4]拿到的并不是正確的J值!!!
這會導致什么?會導致略過一個比較 即p[11]與p[1]的比較被略過!直接比較了p[11]與p[0]!
是否可以略過這個比較?!
答案是肯定的.
根據邏輯推理 如果p[11]與p[4]不等 而p[4] = p[1]那么p[11]與p[1]一定不等 所以可以略過
這樣說似乎很牽強 我們再回想一下NEXT數組的意義 即當我們比較到i位時不等 應該由哪一位重新開始比較 而實際上 這個過程相當于在 7-11的這個串中查找0-3!所以根據NEXT數組的意義 我們也可以知道 這里并不會導致錯誤 由于被略去的比較一定不需比較 因此 J始終可以得到正確的未修正的NEXT值!

?3。KMP算法的局限性 由于KMP算法完全由模式串來考慮滑動 可能忽略一些很好的滑動機會
如當目標串某位不同于模式串時 若此目標串中的字符從未在模式串中出現 那么就可以直接滑過去所有的 這時候 目標串也起了???確定滑動距離 的作用.這其實就是BM算法.有興趣的同學可以參考下列連接
http://www.cnpaf.net/Forum/htm_data/5/0507/1832.html
1977年,Robert Boyer和L.Moore發表了一種新的精確字符串匹配算法,這種算法在邏輯上相對于現有的算法有了很大的超越.它對要搜索的字符串實施逆序字符比較,而且有一種找到了不匹配就不需要對整個字符串進行搜索的方法.這種算法還有最初在PDP-10匯編器上實現的奇跡.

好了 到這里了吧 呵呵 我休息下 最近暈糊涂了

Feedback

# re: KMP算法淺析  回復  更多評論   

2006-10-10 22:05 by 冬天¤不回來
http://www.shnenglu.com/warrior0032/archive/2006/10/10/13543.html
這個連接,上面的連接錯了!!

# re: KMP算法淺析  回復  更多評論   

2006-10-10 23:01 by Optimistic
o 改過來了

# re: KMP算法淺析  回復  更多評論   

2006-10-11 01:26 by
怎么都搞kmp去了..-_-我們要下學期才能學啊......

不過我看過一篇ioi論文, 好象有比kmp更簡潔的匹配, 2003年周源的, 最小數表示法, 同樣是o(n)的線性時間:)

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


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美成人a视频| 久久精品视频va| 亚洲激情在线| 欧美xxx成人| 日韩亚洲在线观看| 一区二区欧美国产| 国产精品美女一区二区在线观看| 亚洲一区二区欧美日韩| 99精品视频免费观看| 欧美午夜视频在线观看| 亚洲欧美激情精品一区二区| 亚洲一级免费视频| 国产亚洲午夜高清国产拍精品| 久久久久一区| 欧美高清视频在线播放| 亚洲五月婷婷| 欧美影院在线| 亚洲精品一区在线观看香蕉| 一区二区黄色| 国产一区二区三区四区五区美女| 欧美gay视频激情| 欧美va天堂在线| 香蕉久久国产| 玖玖综合伊人| 亚洲免费在线播放| 久久人人精品| 亚洲欧美综合国产精品一区| 久久精品一二三区| 99视频一区二区三区| 性欧美暴力猛交另类hd| 亚洲精品美女| 欧美一区在线看| 在线亚洲国产精品网站| 久久久青草婷婷精品综合日韩| 99re视频这里只有精品| 久久精品人人做人人爽| 亚洲综合成人在线| 狂野欧美一区| 久久国产精品网站| 欧美性猛交一区二区三区精品| 久久嫩草精品久久久精品一| 欧美视频在线播放| 亚洲国产精品尤物yw在线观看| 国产精品视频最多的网站| 91久久国产精品91久久性色| 国内精品久久久久伊人av| 99国产精品久久| 亚洲精品日本| 久久这里只有精品视频首页| 欧美一级成年大片在线观看| 欧美日韩国产小视频在线观看| 麻豆精品视频在线观看| 国产午夜久久| 亚洲欧美视频| 欧美一区二区| 国产精品福利片| 日韩图片一区| 9久re热视频在线精品| 欧美国产三级| 91久久国产综合久久91精品网站| 亚洲第一天堂无码专区| 欧美在线亚洲综合一区| 午夜精品www| 国产精品欧美久久| 日韩午夜一区| 99热免费精品| 欧美日韩美女| aaa亚洲精品一二三区| 亚洲视频电影在线| 欧美日韩午夜精品| 亚洲视频在线一区| 午夜精品久久久久久久白皮肤| 欧美日韩日日骚| 夜夜精品视频| 欧美一级视频一区二区| 国产精品亚洲综合久久| 欧美一激情一区二区三区| 久久精品夜色噜噜亚洲aⅴ| 黑丝一区二区| 欧美a级片网| 99精品国产在热久久下载| 亚洲男女自偷自拍图片另类| 国产精品免费视频xxxx| 欧美专区福利在线| 欧美1区2区| 国产精品99久久久久久久久久久久 | 亚洲精品欧美日韩| 欧美日本亚洲| 亚洲综合视频1区| 久久精品一区二区三区不卡牛牛 | 国产精品国产三级国产aⅴ9色| 在线性视频日韩欧美| 久久se精品一区精品二区| 国产亚洲人成a一在线v站| 久久午夜精品一区二区| 亚洲精品视频在线观看免费| 先锋影院在线亚洲| 亚洲国产精品久久| 欧美性大战久久久久久久蜜臀| 一区二区欧美日韩| 久久这里有精品视频| 99精品黄色片免费大全| 国产一区二区三区四区| 欧美黄色影院| 欧美与黑人午夜性猛交久久久| 欧美激情视频一区二区三区免费| 亚洲一区二区三区国产| 在线观看日韩www视频免费| 欧美日韩亚洲三区| 久久免费观看视频| 在线综合+亚洲+欧美中文字幕| 久久亚洲视频| 先锋亚洲精品| 一本色道久久综合狠狠躁篇怎么玩 | 国产日韩欧美综合在线| 欧美电影在线观看完整版| 午夜伦理片一区| 亚洲精品偷拍| 欧美h视频在线| 欧美一区二区三区免费在线看 | 国产精品视频xxxx| 欧美国产日韩一区| 久久精品国产99国产精品| 中文欧美字幕免费| 亚洲国产va精品久久久不卡综合| 欧美一区午夜精品| 亚洲性视频h| 夜夜嗨一区二区三区| 在线精品视频在线观看高清| 国产视频亚洲精品| 国产精品激情电影| 欧美日韩国产大片| 欧美激情综合五月色丁香小说 | 一区二区三区你懂的| 亚洲高清视频在线观看| 狂野欧美激情性xxxx| 欧美专区中文字幕| 亚洲欧美在线x视频| 亚洲婷婷在线| 一区二区三区欧美成人| 99精品国产一区二区青青牛奶| 亚洲国产精品va| 亚洲国产精品嫩草影院| 在线不卡a资源高清| 激情久久中文字幕| 伊人狠狠色丁香综合尤物| 黄色成人小视频| 黑人一区二区| 揄拍成人国产精品视频| 国语自产在线不卡| 在线精品一区二区| 91久久久久久久久| 91久久国产综合久久91精品网站| 在线观看欧美精品| 亚洲黄色天堂| 在线一区日本视频| 亚洲一区在线播放| 欧美综合国产| 另类激情亚洲| 亚洲激情视频在线| 一本不卡影院| 亚洲欧美成人一区二区在线电影| 亚洲免费综合| 久久免费视频网| 欧美国产高清| 国产精品狠色婷| 国产在线不卡视频| 亚洲国产一区二区视频| 一区二区三区偷拍| 久久成人免费视频| 欧美大胆人体视频| 日韩视频免费观看| 欧美亚洲一级片| 欧美高清视频在线| 国产精品欧美日韩| 亚洲高清不卡在线| 亚洲嫩草精品久久| 狂野欧美一区| 亚洲精品国产系列| 午夜精品国产精品大乳美女| 免费短视频成人日韩| 欧美视频四区| 在线成人欧美| 羞羞色国产精品| 亚洲电影在线看| 亚洲图片在线| 免费在线观看成人av| 国产免费亚洲高清| 亚洲精品一二三| 久久久久久亚洲精品杨幂换脸| 亚洲精品日韩在线观看| 久久国内精品视频| 国产精品草莓在线免费观看| 一区二区亚洲| 欧美一区二区三区视频在线 | 欧美中文字幕视频在线观看| 亚洲国产成人不卡| 香蕉亚洲视频| 欧美色视频一区| 亚洲欧洲一区二区天堂久久 |