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

oyjpArt ACM/ICPC算法程序設(shè)計空間

// 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三位牛人提出的快速匹配算法 得到了非常的廣泛的應(yīng)用
鑒于最近教材正在學KMP算法 我在此對次算法進行一下簡略分析 不清楚的同學可以參考一下
//By Optimistic

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

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

我們用next[i]這個數(shù)組來存儲當模式串的第i位比較出現(xiàn)不匹配時 模式串的從哪里開始比較
比如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;
}

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

其中解釋了算法的基本思想和實現(xiàn)過程

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

2。程序沒有使用一個數(shù)組來保存未修正時的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值!!!
這會導(dǎo)致什么?會導(dǎo)致略過一個比較 即p[11]與p[1]的比較被略過!直接比較了p[11]與p[0]!
是否可以略過這個比較?!
答案是肯定的.
根據(jù)邏輯推理 如果p[11]與p[4]不等 而p[4] = p[1]那么p[11]與p[1]一定不等 所以可以略過
這樣說似乎很牽強 我們再回想一下NEXT數(shù)組的意義 即當我們比較到i位時不等 應(yīng)該由哪一位重新開始比較 而實際上 這個過程相當于在 7-11的這個串中查找0-3!所以根據(jù)NEXT數(shù)組的意義 我們也可以知道 這里并不會導(dǎo)致錯誤 由于被略去的比較一定不需比較 因此 J始終可以得到正確的未修正的NEXT值!

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

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

Feedback

# re: KMP算法淺析  回復(fù)  更多評論   

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

# re: KMP算法淺析  回復(fù)  更多評論   

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

# re: KMP算法淺析  回復(fù)  更多評論   

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

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

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   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>
            国产在线国偷精品产拍免费yy| 亚洲主播在线播放| 麻豆久久久9性大片| 欧美在线综合| 久久国产99| 久久综合给合久久狠狠狠97色69| 性刺激综合网| 久久精品国产99| 久久视频国产精品免费视频在线| 欧美一二三区在线观看| 久久电影一区| 欧美成人69av| 欧美午夜不卡影院在线观看完整版免费| 免费亚洲电影在线| 欧美日韩亚洲网| 国产情侣一区| 亚洲国产视频a| 中文在线不卡视频| 久久精品一本| 亚洲国产欧美不卡在线观看| 欧美黄色一区二区| 亚洲视频久久| 久久这里有精品视频| 欧美日韩在线综合| 国内久久婷婷综合| 一区二区三区日韩| 美日韩精品免费| 亚洲视频一二区| 免费亚洲视频| 国模私拍一区二区三区| 亚洲色图在线视频| 久久精品国产亚洲精品| 欧美激情一区二区三区成人| 一区二区三区.www| 久久一综合视频| 国产精品亚发布| 日韩视频在线播放| 久久综合久久久久88| 亚洲视频精选在线| 欧美日韩精品| 日韩午夜精品| 欧美激情二区三区| 久久精品伊人| 国产在线观看一区| 久久成人资源| 亚洲免费小视频| 国产精品成人播放| 亚洲精品一线二线三线无人区| 亚洲在线不卡| 亚洲国产精品毛片| 久久综合九色欧美综合狠狠| 国产欧美丝祙| 亚洲欧美日韩综合一区| 亚洲日本视频| 欧美二区视频| 亚洲人午夜精品免费| 欧美国产在线电影| 男女精品视频| 99ri日韩精品视频| 亚洲精品日韩欧美| 欧美激情在线| 99精品欧美一区二区三区| 亚洲国产毛片完整版| 欧美精品成人一区二区在线观看 | 一区二区三区在线不卡| 久久国产日韩| 亚欧成人在线| 国产一区激情| 久久综合九色九九| 麻豆成人综合网| 亚洲国产一区二区三区a毛片| 久久亚洲国产成人| 另类欧美日韩国产在线| 亚洲欧洲精品一区| 亚洲精品乱码久久久久久久久| 免费观看日韩| 一区二区欧美激情| 亚洲一区在线看| 精品69视频一区二区三区| 欧美成人精品高清在线播放| 免费看成人av| 亚洲视频一区二区| 亚洲欧美电影在线观看| 精久久久久久| 亚洲精品一区中文| 国产精品一二| 美女亚洲精品| 欧美日韩精品在线视频| 国产精品国产三级国产a| 国产精品二区影院| 久久激情五月婷婷| 另类天堂av| 午夜精品久久久久久99热软件| 亚洲日本中文字幕区| 国产精品嫩草影院av蜜臀| 久久免费黄色| 欧美另类变人与禽xxxxx| 欧美亚洲日本网站| 久久综合九色综合欧美就去吻| 91久久精品久久国产性色也91| 亚洲激情在线播放| 国产日产亚洲精品| 最新亚洲激情| 国产有码一区二区| 艳女tv在线观看国产一区| 在线成人激情| 亚洲欧美国产三级| 艳女tv在线观看国产一区| 欧美在线观看视频在线| 一本综合精品| 欧美一区观看| 午夜亚洲激情| 欧美日韩亚洲高清| 亚洲激情影院| 亚洲激情成人网| 久久精品国产成人| 午夜一级久久| 欧美视频一区二区三区…| 欧美激情影院| 亚洲第一区在线观看| 欧美一区二区高清| 小黄鸭视频精品导航| 欧美色区777第一页| 亚洲国产成人久久综合一区| 国内精品视频一区| 欧美在线视频全部完| 午夜一区二区三区在线观看| 欧美视频在线一区| 夜夜精品视频| 亚洲一区观看| 国产精品久久国产精品99gif | 精品动漫一区| 久久国产99| 久久视频国产精品免费视频在线| 欧美日韩伦理在线免费| 亚洲日本理论电影| 99re亚洲国产精品| 欧美久久在线| 亚洲毛片在线看| 亚洲天堂av综合网| 欧美日韩综合| 亚洲永久网站| 久久精品卡一| 一区二区在线不卡| 久久在线精品| 欧美激情国产日韩| 亚洲国产精品久久91精品| 久久久久久亚洲精品中文字幕| 久久久久国产精品厨房| 黄色成人av在线| 久久一区二区三区国产精品| 国产毛片一区二区| 亚洲国产网站| 一本色道久久88综合亚洲精品ⅰ| 久久嫩草精品久久久精品| 免费国产自线拍一欧美视频| 伊人久久亚洲美女图片| 老司机午夜精品视频在线观看| 欧美成人中文| 一区二区三区偷拍| 国产日韩一区二区三区| 久久久国产精品一区| 亚洲第一成人在线| 一区二区三区成人| 国产婷婷一区二区| 欧美freesex8一10精品| 中文高清一区| 麻豆91精品91久久久的内涵| 亚洲理伦在线| 国产日韩欧美日韩| 欧美国产视频一区二区| 亚洲一区二区欧美日韩| 老司机免费视频一区二区三区| 亚洲观看高清完整版在线观看| 欧美1区免费| 亚洲欧美成人一区二区三区| 欧美国产日韩a欧美在线观看| 亚洲美女黄色| 国产一区二区三区在线观看视频| 老司机午夜精品视频| 亚洲一区二区三区免费观看| 欧美成人中文字幕| 久久精品国产免费观看| 夜夜嗨av一区二区三区四区| 国产亚洲人成a一在线v站| 欧美精品一区二区久久婷婷| 欧美与欧洲交xxxx免费观看| 亚洲一区二区日本| 日韩一级在线| 欧美激情1区| 久久人91精品久久久久久不卡| 日韩亚洲一区二区| 亚洲第一精品电影| 国产亚洲综合性久久久影院| 欧美三区在线| 欧美三区在线视频| 欧美日韩日本网| 欧美激情第五页| 蜜桃av综合| 老牛嫩草一区二区三区日本|