亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? kmp.txt

?? 數據結構中kmp算法的詳解
?? TXT
字號:
百度空間 | 百度首頁 | 登錄                  電腦知識擂臺一起學習,一起進步。 主頁博客相冊|個人檔案 |好友   查看文章    
貼]KMP算法中nextval的計算方法2009-03-23 10:00
KMP算法即Knuth-Morris-Pratt算法,是模式匹配的一種改進算法,因為是名字中三人同時發現的,所以稱為KMP算法。因為偶然接觸到有關KMP的問題,所以上網查了一下next數組和nextval數組的求法,卻沒有找到,只有在CSDN的資料文件里找到了next數組的簡單求法(根據書上提供的程序也可以求到,但一般在課堂講解的時候,學生難以理解,所以希望以更容易理解的形式來講解),那位高人說時間關系,先講到這里,于是講完了next數組就功成身退了。BS的同時,自己研究了下nextwal數組,發現了其中的簡易規律,并寫了出來,希望能對需要快速理解KMP中nextval的求法的朋友有所幫助。
     int get_nextval(SString T,int &nextval[ ]){
         //求模式串T的next函數修正值并存入數組nextval。
         i=1; nextval[1]=0; j=0;
         while(i<T[0]){
             if(j==0||T[i]==T[j]){
                 ++i;++j;
                 if (T[i]!=T[j]) nextval[i]=j;
                 else nextval[i]=nextval[j];
             }
             else j=nextval[j];
         }
     }//get_nextval
     根據這段程序來求nextval的值是可以方便計算出來,但如果是應付考研試題或者期末考試就有點麻煩了。而如果記住我推薦的方法,那么任何時候都可以很方便地求解nextval了。
     首先看看next數組值的求解方法。
     例如: 模式串 a b a a b c a c 
   next值 0 1 1 2 2 3 1 2 
   nextval值         
     next數組的求解方法是:第一位的next值為0,第二位的next值為1,后面求解每一位的next值時,根據前一位進行比較。首先將前一位與其next值對應的內容進行比較,如果相等,則該位的next值就是前一位的next值加上1;如果不等,向前繼續尋找next值對應的內容來與前一位進行比較,直到找到某個位上內容的next值對應的內容與前一位相等為止,則這個位對應的值加上1即為需求的next值;如果找到第一位都沒有找到與前一位相等的內容,那么需求的位上的next值即為1。
     看起來很令人費解,利用上面的例子具體運算一遍。
     1.前兩位必定為0和1。
     2.計算第三位的時候,看第二位b的next值,為1,則把b和1對應的a進行比較,不同,則第三位a的next的值為1,因為一直比到最前一位,都沒有發生比較相同的現象。
     3.計算第四位的時候,看第三位a的next值,為1,則把a和1對應的a進行比較,相同,則第四位a的next的值為第三位a的next值加上1。為2。因為是在第三位實現了其next值對應的值與第三位的值相同。
     4.計算第五位的時候,看第四位a的next值,為2,則把a和2對應的b進行比較,不同,則再將b對應的next值1對應的a與第四位的a進行比較,相同,則第五位的next值為第二位b的next值加上1,為2。因為是在第二位實現了其next值對應的值與第四位的值相同。
     5.計算第六位的時候,看第五位b的next值,為2,則把b和2對應的b進行比較,相同,則第六位c的next值為第五位b的next值加上1,為3,因為是在第五位實現了其next值對應的值與第五位相同。
     6.計算第七位的時候,看第六位c的next值,為3,則把c和3對應的a進行比較,不同,則再把第3位a的next值1對應的a與第六位c比較,仍然不同,則第七位的next值為1。
     7.計算第八位的時候,看第七位a的next值,為1,則把a和1對應的a進行比較,相同,則第八位c的next值為第七位a的next值加上1,為2,因為是在第七位和實現了其next值對應的值與第七位相同。
     在計算nextval之前要先弄明白,nextval是為了彌補next函數在某些情況下的缺陷而產生的,例如主串為“aaabaaaab”、模式串為“aaaab”那么,比較的時候就會發生一些浪費的情況:比較到主串以及模式串的第四位時,發現其值并不相等,據我們觀察,我們可以直接從主串的第五位開始與模式串進行比較,而事實上,卻進行了幾次多余的比較。使用nextval可以去除那些不必要的比較次數。
     求nextval數組值有兩種方法,一種是不依賴next數組值直接用觀察法求得,一種方法是根據next數組值進行推理,兩種方法均可使用,視更喜歡哪種方法而定。
     我們使用例子“aaaab”來考查第一種方法。
     1.試想,在進行模式匹配的過程中,將模式串“aaaab”與主串進行匹配的時候,如果第一位就沒有吻合,即第一位就不是a,那么不用比較了,趕快挪到主串的下一位繼續與模式串的第一位進行比較吧,這時,模式串并沒有發生偏移,那么,模式串第一位a的nextval值為0。
     2.如果在匹配過程中,到第二位才發生不匹配現象,那么主串的第一位必定是a,而第二位必定不為a,既然知道第二位一定不為a,那么主串的第一、二兩位就沒有再進行比較的必要,直接跳到第三位來與模式串的第一位進行比較吧,同樣,模式串也沒有發生偏移,第二位的nextval值仍然為0。
     3.第三位、第四位類似2的過程,均為0。
     4.如果在匹配過程中,直到第五位才發生不匹配現象,那么主串的第一位到第四位必定為a,并且第五位必定不為b,可是第五位仍然有可能等于a。如果萬一第五位為a,那么既然前面四位均為a,所以,只要第六位為b,第一個字符串就匹配成功了。所以,現在的情況下,就是看第五位究竟是不是a了。所以發生了下面的比較: 
1 2 3 4 5 6 
a a a a * * 
a a a a b  
 a a a a b 


     前面的三個a都不需要進行比較,只要確定主串中不等于b的那個位是否為a,即可以進行如下的比較:如果為a,則繼續比較主串后面一位是否為b;如果不為a,則此次比較結束,繼續將模式串的第一位去與主串的下一位進行比較。由此看來,在模式串的第五位上,進行的比較偏移了4位(不進行偏移,直接比較下一位為0),故第五位b的nextval值為4。
     我們可以利用第一個例子“abaabcac”對這種方法進行驗證。
     a的nextval值為0,因為如果主串的第一位不是a,那么沒有再比較下去的必要,直接比較主串的第二位是否為a。如果比較到主串的第二位才發生錯誤,則主串第一位肯定為a,第二位肯定不為b,此時不能直接跳到第三位進行比較,因為第二位還可能是a,所以對主串的第二位再進行一次比較,偏移了1位,故模式串第二位的nextval值為1。以此類推,nextval值分別為:01021302。其中第六位的nextval之所以為3,是因為,如果主串比較到第六位才發生不匹配現象,那么主串的前五位必定為“abaab”且第六位必定不是“c”,但第六位如果為“a”的話,那么我們就可以從模式串的第四位繼續比較下去。所以,這次比較為: 1 2 3 4  5 6 7 8 9 10  11  12 
a b a a b * * * * * * * 
   a b a a b c a c  

     而不是: 1 2 3 4  5 6 7 8 9 10  11  12 
a b a a b * * * * * * * 
     a b a a b c a 

     因為前兩位a和b已經確定了,所以不需要再進行比較了。所以模式串第六位的nextval值為這次比較的偏移量3。
     再來看求nextval數組值的第二種方法。
模式串 a b a a b c a c 
next值 0 1 1 2 2 3 1 2 
nextval值 0 1 0 2 1 3 0 2 

     1.第一位的nextval值必定為0,第二位如果于第一位相同則為0,如果不同則為1。
     2.第三位的next值為1,那么將第三位和第一位進行比較,均為a,相同,則,第三位的nextval值為0。
     3.第四位的next值為2,那么將第四位和第二位進行比較,不同,則第四位的nextval值為其next值,為2。
     4.第五位的next值為2,那么將第五位和第二位進行比較,相同,第二位的next值為1,則繼續將第二位與第一位進行比較,不同,則第五位的nextval值為第二位的next值,為1。
     5.第六位的next值為3,那么將第六位和第三位進行比較,不同,則第六位的nextval值為其next值,為3。
     6.第七位的next值為1,那么將第七位和第一位進行比較,相同,則第七位的nextval值為0。
     7.第八位的next值為2,那么將第八位和第二位進行比較,不同,則第八位的nextval值為其next值,為2。
     在“aaaab”內進行驗證。 模式串 a a a a b 
next值 0 1 2 3 4 
nextval值 0 0 0 0 4 

 

類別:數據結構 | 添加到搜藏 | 瀏覽(21) | 評論 (0)  上一篇:右鍵單擊桌面顯示屬性選項卡不見...    下一篇:學好嵌入式 step by step 最近讀者: 登錄后,您就出現在這里。   
    qianru073  
 網友評論:    發表評論:姓 名:     注冊 | 登錄 *姓名最長為50字節 
   
網址或郵箱:  (選填) 
   
內 容: 插入表情  ▼ 閃光字 
 
 
  
   
驗證碼:  
看不清?  
      取消回復 

      

?2009 Baidu 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
香蕉成人啪国产精品视频综合网| 一区二区成人在线观看| 91精品国产色综合久久不卡电影 | 一二三区精品视频| ●精品国产综合乱码久久久久| 国产亚洲成年网址在线观看| 精品国产一区二区在线观看| 欧美成人一区二区| 精品久久一区二区三区| 久久综合999| 久久久久久一二三区| 中文字幕二三区不卡| 亚洲桃色在线一区| 亚洲一区二区三区四区五区黄| 最新国产成人在线观看| 亚洲一区免费观看| 香蕉加勒比综合久久| 免费看欧美美女黄的网站| 国产在线播放一区| 丰满少妇久久久久久久| 一本久久精品一区二区| 欧美巨大另类极品videosbest | 精品99一区二区| 国产欧美日韩综合| 亚洲精品国产无套在线观| 亚洲成人黄色影院| 国产麻豆精品在线观看| 不卡欧美aaaaa| 欧美曰成人黄网| 欧美sm极限捆绑bd| 亚洲欧洲日本在线| 青椒成人免费视频| 成人av在线看| 91麻豆精品久久久久蜜臀| 国产午夜精品久久久久久久| 亚洲日本在线天堂| 久久国产生活片100| av网站免费线看精品| 这里只有精品电影| 亚洲特级片在线| 国产一区二区在线影院| 欧美性xxxxxxxx| 欧美激情一区二区三区四区| 午夜精品久久久久久久久久久| 国产精一品亚洲二区在线视频| 日本韩国欧美一区| 国产欧美日韩视频在线观看| 亚洲国产精品一区二区久久| 国产一区久久久| 欧美一区二区在线不卡| 亚洲欧美日韩综合aⅴ视频| 国产一区二区视频在线播放| 欧美在线观看一二区| 国产精品久久久久精k8| 激情文学综合丁香| 欧美一区二区在线观看| 亚洲综合免费观看高清在线观看| 国产成人免费在线视频| 欧美一区二区三区成人| 香蕉久久一区二区不卡无毒影院| 99精品热视频| 国产精品久久三| 国产黄色91视频| 久久色在线观看| 热久久久久久久| 欧美日韩中字一区| 亚洲国产欧美另类丝袜| 色94色欧美sute亚洲线路一ni | 亚洲免费视频成人| 97久久超碰国产精品| 国产精品久久久久天堂| 国产成人免费av在线| 亚洲精品在线免费观看视频| 青青草成人在线观看| 欧美一三区三区四区免费在线看 | 久久国产精品一区二区| 91麻豆精品国产91久久久资源速度 | 亚洲午夜私人影院| 欧美日韩视频不卡| 日韩激情视频网站| 91精品国产综合久久精品性色| 婷婷成人激情在线网| 欧美日韩三级一区| 美女视频黄 久久| 久久众筹精品私拍模特| 国产成人免费9x9x人网站视频| 亚洲国产精品精华液ab| 99re在线视频这里只有精品| 自拍偷拍欧美激情| 欧美日韩www| 蜜臀久久99精品久久久久久9| 91精品免费观看| 国产一区二区精品在线观看| 中文字幕精品三区| 在线观看av一区二区| 日韩成人免费在线| 国产精品美女一区二区三区| 91视视频在线直接观看在线看网页在线看| 亚洲免费视频中文字幕| 欧美一区二区三区在线看| 极品少妇一区二区三区精品视频| 欧美激情综合网| 欧美亚一区二区| 国内精品写真在线观看| 亚洲码国产岛国毛片在线| 欧美日韩国产另类不卡| 国产精品一区二区在线观看网站| 亚洲免费视频成人| 精品嫩草影院久久| 色婷婷综合久色| 激情图片小说一区| 亚洲在线观看免费| 久久尤物电影视频在线观看| 91福利视频网站| 国产一区二区不卡老阿姨| 亚洲综合自拍偷拍| 国产午夜精品理论片a级大结局| 91亚洲精华国产精华精华液| 日日夜夜免费精品| 综合久久久久久久| 国产视频一区二区在线观看| 欧美色图一区二区三区| 成人白浆超碰人人人人| 久久电影国产免费久久电影 | 日韩女优av电影在线观看| 色偷偷88欧美精品久久久 | 中文字幕一区二区三区不卡在线 | 成人动漫视频在线| 韩国精品久久久| 性做久久久久久久免费看| 国产精品女主播在线观看| 欧美电影免费观看完整版| 精品污污网站免费看| 色美美综合视频| 成人久久视频在线观看| 另类欧美日韩国产在线| 亚洲成av人片一区二区三区| 亚洲男人的天堂一区二区| 欧美国产一区视频在线观看| xnxx国产精品| 欧美tickling挠脚心丨vk| 欧美精品第1页| 欧美视频中文字幕| 欧美亚洲高清一区| 欧美午夜电影网| 色婷婷激情综合| 在线精品视频免费观看| 色综合色狠狠天天综合色| 91在线播放网址| 色综合久久中文综合久久97| 99久免费精品视频在线观看| 成人av在线播放网址| 成人丝袜18视频在线观看| 成熟亚洲日本毛茸茸凸凹| 成人h动漫精品| 一本到不卡免费一区二区| 在线观看免费视频综合| 欧美丝袜第三区| 欧美美女一区二区在线观看| 欧美久久一二区| 欧美一区二区三区免费观看视频| 日韩一区二区视频在线观看| 日韩三级免费观看| 国产亚洲欧美色| 亚洲视频小说图片| 亚洲123区在线观看| 美女被吸乳得到大胸91| 国产精品自产自拍| 91日韩在线专区| 欧美色视频在线观看| 日韩欧美国产综合在线一区二区三区| 日韩精品一区二区三区四区| 久久久久久久av麻豆果冻| 成人欧美一区二区三区1314| 亚洲乱码日产精品bd | 精品理论电影在线| 中文字幕高清不卡| 亚洲一区二区三区四区在线| 男人的天堂久久精品| 国内精品不卡在线| 91在线观看美女| 欧美一级久久久久久久大片| 国产人成亚洲第一网站在线播放| 亚洲男帅同性gay1069| 免费成人在线视频观看| 成人在线视频一区| 欧美二区三区91| 国产偷国产偷精品高清尤物| 亚洲综合精品久久| 国产美女一区二区| 欧美日韩一区二区欧美激情| 精品国产乱码久久久久久浪潮| 成人欧美一区二区三区白人| 日韩av成人高清| 色婷婷激情综合| 国产无一区二区| 热久久一区二区| 在线免费不卡视频| 久久久久久久久久久电影| 日韩精品福利网|