亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JavaScript中數據結構與算法(五):經典KMP算法

2019-11-02 15:54:11
字體:
來源:轉載
供稿:網友

   這篇文章主要介紹了JavaScript中數據結構與算法(五):經典KMP算法,本文詳解了KMP算法的方方面在,需要的朋友可以參考下

  KMP算法和BM算法

  KMP是前綴匹配和BM后綴匹配的經典算法,看得出來前綴匹配和后綴匹配的區別就僅僅在于比較的順序不同

  前綴匹配是指:模式串和母串的比較從左到右,模式串的移動也是從 左到右

  后綴匹配是指:模式串和母串的的比較從右到左,模式串的移動從左到右。

  通過上一章顯而易見BF算法也是屬于前綴的算法,不過就非常霸蠻的逐個匹配的效率自然不用提了O(mn),網上蛋疼的KMP是講解很多,基本都是走的高大上路線看的你也是一頭霧水,我試圖用自己的理解用最接地氣的方式描述

  KMP

  KMP也是一種優化版的前綴算法,之所以叫KMP就是Knuth、Morris、Pratt三個人名的縮寫,對比下BF那么KMP的算法的優化點就在“每次往后移動的距離”它會動態的調整每次模式串的移動距離,BF是每次都+1,

  KMP則不一定

  如圖BF與KMP前置算法的區別對比

  我通過圖對比我們發現:

  在文本串T中搜索模式串P,在自然匹配第6個字母c的時候發現二等不一致了,那么BF的方法,就是把整個模式串P移動一位,KMP則是移動二位.

  BF的匹配方法我們是知道的,但是KMP為什么會移動二位,而不是一位或者三位四位呢?

  這就上一張圖我們講解下,模式串P在匹配了ababa的時候都是正確的,當到c的時候才是錯誤,那么KMP算法的想法是:ababa是正確的匹配完成的信息,我們能不能利用這個信息,不要把"搜索位置"移回已經比較過的位置,繼續把它向后移,這樣就提高了效率。

  那么問題來了, 我怎么知道要移動多少個位置?

  這個偏移的算法KMP的作者們就給我們總結好了:

  代碼如下:

  移動位數 = 已匹配的字符數 - 對應的部分匹配值

  偏移算法只跟子串有關系,沒文本串沒毛線關系,所以這里需要特別注意了

  那么我們怎么理解子串中已匹配的字符數與對應的部分匹配值?

  已匹配的字符:

   代碼如下:

  T : abababaabab

  p : ababacb

  p中紅色的標記就是已經匹配的字符,這個很好理解

  部分匹配值:

  這個就是核心的算法了,也是比較難于理解的

  假如:

   代碼如下:

  T:aaronaabbcc

  P:aaronaac

  我們可以觀察這個文本如果我們在匹配c的時候出錯,我們下一個移動的位置就上個的結構來講,移動到那里最合理?

   代碼如下:

  aaronaabbcc

  aaronaac

  那么就是說:在模式文本內部,某一段字符頭尾都一樣,那么自然過濾的時候可以跳過這一段內容了,這個思路也是合理的

  知道了這個規律,那么給出來的部分匹配表算法如下:

  首先,要了解兩個概念:"前綴"和"后綴"。 "前綴"指除了最后一個字符以外,一個字符串的全部頭部組合;"后綴"指除了第一個字符以外,一個字符串的全部尾部組合。

  "部分匹配值"就是"前綴"和"后綴"的最長的共有元素的長度”

  我們看看aaronaac的如果是BF匹配的時候劃分是這樣的

  BF的位移: a,aa,aar,aaro,aaron,aarona,aaronaa,aaronaac

  那么KMP的劃分呢?這里就要引入前綴與后綴了

  我們先看看KMP部分匹配表的結果是這樣的:

  代碼如下:

  a a r o n a a c

  [0, 1, 0, 0, 0, 1, 2, 0]

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕精品网| 精品自在线视频| 亚洲qvod图片区电影| 久久久黄色av| 亚洲成人网在线| 日韩第一页在线| 亚洲福利视频久久| 日韩电视剧免费观看网站| 久久频这里精品99香蕉| 成人欧美在线观看| 亚洲国产精品va在看黑人| 日韩一中文字幕| 欧美午夜丰满在线18影院| 欧美在线www| 欧美日韩亚洲国产一区| 国产精品一区二区三区免费视频| 亚洲综合中文字幕在线观看| 日本在线观看天堂男亚洲| 日韩中文字幕在线视频| 欧美日本高清视频| 亚洲精品色婷婷福利天堂| 欧美色图在线视频| 久久香蕉频线观| 欧美午夜视频在线观看| 欧美日韩中文字幕在线| 亚洲美女久久久| 中文字幕日韩在线视频| 麻豆乱码国产一区二区三区| 欧美视频在线观看 亚洲欧| 精品久久久在线观看| 国产欧亚日韩视频| 欧美午夜激情在线| 久久99青青精品免费观看| 亚洲国产成人精品女人久久久| 在线视频免费一区二区| 日韩高清人体午夜| 在线观看国产欧美| 久久精品国产亚洲精品| 欧美极品美女视频网站在线观看免费| 中文字幕精品久久久久| 日本国产精品视频| 国产精品偷伦视频免费观看国产| 日韩免费看的电影电视剧大全| 日韩av观看网址| 久久成年人视频| 91国语精品自产拍在线观看性色| 国产精品久久久久久久久久| 久久成年人视频| 亚洲石原莉奈一区二区在线观看| 日韩av免费在线| 亚洲欧美中文日韩v在线观看| 国产精品成熟老女人| 欧美福利小视频| 久久精品色欧美aⅴ一区二区| 亚洲视频专区在线| 91九色视频导航| 亚洲区免费影片| 欧美性xxxxx| 欧美成人三级视频网站| 亚洲免费av片| 成人444kkkk在线观看| 久久久欧美精品| 日韩欧美在线视频观看| 高跟丝袜一区二区三区| 国产精品18久久久久久麻辣| 日韩影视在线观看| 国产精品视频999| 欧美日韩中国免费专区在线看| 日韩精品欧美国产精品忘忧草| 亚洲女同精品视频| 午夜精品久久久久久久久久久久| 久久成人综合视频| 日韩免费看的电影电视剧大全| 国产在线高清精品| 成人精品在线视频| 久久久久久999| 欧美精品在线极品| 成人免费网站在线| 亚洲精品国产拍免费91在线| 国产成人精品在线| 亚洲r级在线观看| 欧美亚洲激情在线| 丁香五六月婷婷久久激情| 国产一区二区在线播放| 日韩美女写真福利在线观看| 91久久精品国产91久久性色| 国产精品第8页| 精品成人乱色一区二区| 亚洲美女av电影| 91av福利视频| 欧美极品美女电影一区| 亚洲精品不卡在线| 不卡av在线网站| 日韩成人高清在线| 亚洲精品白浆高清久久久久久| 欧美第一页在线| 日韩在线精品一区| 久久久久久久久91| 国产精品久久久久7777婷婷| 日韩精品免费在线视频| 亚洲国产精品热久久| 久久国产精品影片| 亚洲精品成人久久| 精品露脸国产偷人在视频| 国产精品久久久久久久久久新婚| 久久久久久久久91| 国产自摸综合网| 在线观看91久久久久久| 亚洲а∨天堂久久精品喷水| 亚洲综合社区网| 2019精品视频| 亚洲一区二区精品| 久久免费成人精品视频| 欧美在线视频观看免费网站| 91久久精品久久国产性色也91| 亚洲美女av在线播放| 日韩av成人在线观看| 欧美性高潮在线| 久久精品中文字幕免费mv| 精品亚洲一区二区三区| 欧美精品在线第一页| 97免费视频在线| 国内免费久久久久久久久久久| 精品一区二区三区电影| 日韩一区二区在线视频| 97视频在线观看亚洲| 日韩精品久久久久久福利| 精品久久久久久中文字幕| 国产精品久久久久7777婷婷| 国产视频精品久久久| 中文字幕亚洲无线码a| 国产精自产拍久久久久久| 91香蕉嫩草影院入口| 国产第一区电影| 日本精品va在线观看| 国产成人精品网站| 亚洲欧洲在线视频| 日韩中文字幕免费视频| 日本高清不卡在线| 欧美国产欧美亚洲国产日韩mv天天看完整| 中文在线资源观看视频网站免费不卡| 亚洲一区二区免费在线| 成人高清视频观看www| 国产午夜精品一区二区三区| 福利视频导航一区| 久久久久久久久久婷婷| 国产精品99一区| 38少妇精品导航| 久久深夜福利免费观看| 成人在线小视频| 久久久www成人免费精品| 国产精品高潮粉嫩av| 日韩欧美第一页| 欧美性69xxxx肥| 成人国内精品久久久久一区| 久久久久久久久久亚洲| 日韩欧美在线视频| 亚洲精品久久久久中文字幕二区| 欧美高清理论片| 欧洲成人性视频| 亚洲国产古装精品网站| 亚洲天堂成人在线| 亚洲国产精品久久| 国产精品流白浆视频|