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

glxhyt

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  15 隨筆 :: 0 文章 :: 4 評論 :: 0 Trackbacks

字符串匹配:

---willamette

在匹配串中尋找模式串是否出現,注意和最長公共子序列相區別(LCS: Longest Common Substring)

最簡單的Brute Force算法:

首先將匹配串和模式串左對齊,然后從左向右一個一個進行比較,如果不成功則模式串向右移動一個單位。

速度最慢。

那么,怎么改進呢?

我們注意到Brute Force算法是每次移動一個單位,一個一個單位移動顯然太慢,是不是可以找到一些辦法,讓每次能夠讓模式串多移動一些位置呢?

當然是可以的。

我們也注意到,Brute Force是很不intelligent的,每次匹配不成功的時候,前面匹配成功的信息都被當作廢物丟棄了,當然,就如現在的變廢為寶一樣,我們也同樣可以將前面匹配成功的信息利用起來,極大地減少計算機的處理時間,節省成本。^_^

首先介紹的就是KMP算法。

原始論文:Knuth D.E., Morris J.H., and Pratt V.R., Fast pattern matching in strings, SIAM Journal on Computing, 6(2), 323-350, 1977.

這個算法實在是太有名了,大學上的算法課程除了最笨的Brute Force算法,然后就介紹了KMP算法。也難怪,呵呵。誰讓Knuth D.E.這么world famous呢,不僅拿了圖靈獎,而且還寫出了計算機界的Bible <The Art of Computer Programming>(業內人士一般簡稱TAOCP).稍稍提一下,有個叫H.A.Simon的家伙,不僅拿了Turing Award,順手拿了個Nobel Economics Award,做了AI的爸爸,還是Chicago Univ的Politics PhD,可謂全才。

KMP的思想是這樣的:

利用不匹配字符的前面那一段字符的最長前后綴來盡可能地跳過最大的距離

比如

模式串ababac這個時候我們發現在c處不匹配,然后我們看c前面那串字符串的最大相等前后綴,然后再來移動

下面的兩個都是模式串,沒有寫出來匹配串

原始位置ababac

移動之后 ababac

因為后綴是已經匹配了的,而前綴和后綴是相等的,所以直接把前綴移動到原來后綴處,再從原來的c處,也就是現在的第二個b處進行比較。這就是KMP。

當然,有市場就有競爭,字符串匹配這么大一個市場,不可能讓BF和KMP全部占了,于是又出現了幾個強勁的對手。

第一個登場的是Horspool算法。

論文:Horspool R.N., 1980, Practical fast searching in strings, Software - Practice & Experience, 10(6):501-506

Horspool算法的思想很簡單的。不過有個創新之處就是模式串是從右向左進行比較的。很好很強大,為后來的算法影響很大。

匹配串:abcbcsdxzcxx

模式串:cbcac

這個時候我們從右向左進行對暗號,c-c,恩對上了,第二個b-a,不對啊,我們應該怎么辦?難道就這么放棄么。于是,模式串從不匹配的那個字符開始從右向左尋找匹配串中不匹配的字符b的位置,結果發現居然有,趕快對上趕快對上,別耽誤了。

匹配串:abcbcsdxzcxx

模式串: cbcac

然后繼續從最右邊的字符從右向左進行比較。這時候,我們發現了,d-c不匹配啊,而且模式穿里面沒有噢,沒辦法,只好移動一個模式串長度的單位了。

匹配串:abcbcsdxzcxx

模式串: cbcac

第二個上來的是Boyer-Moore算法。

是一個很復雜的算法,當然,雖然理論上時間復雜度和KMP差不多,但是實際上卻比KMP快數倍,可見實踐是檢驗真理的唯一標準。

原始論文:R.S.Boyer, J.S.Moore, A fast string searching algorithm , Communications of the ACM,20(10):762-772 ,1977

分為兩步預處理,第一個是bad-character heuristics,也就是當出現錯誤匹配的時候,移位,基本上就是做的Horspool那一套。

第二個就是good-suffix heuristics,當出現錯誤匹配的時候,我還要從不匹配點向左看啊,以前匹配的那段子字符串是不是在模式串本身中還有重復的啊,有重復的話,那么我就直接把重復的那段和匹配串中已經匹配的那一段對齊就是了。再比較

匹配串:abaccbabbazz

模式串:cbadcba

我們看到已經匹配好了cba,但是c-d不匹配,這個時候我們發現既可以采用bad-character heuristics,也可以使用good-suffix heuristics(模式串:cbadcba),在這種情況下,邪不壓正。毅然投奔good。移動得到

匹配串:abaccbabbazz

模式串: cbadcba

可是,我們有時候也發現,已經匹配好的那一部分其實并沒有再有重復了的啊。這個時候,我們發現已經匹配好的那串字符串有一部分在開頭重新出現了,那么,趕快,對齊吧。

匹配串:abacccbbbazz

模式串:cbadccb

然后得到

匹配串:abacccbbbazz

模式串: cbadccb

當兩種Good-Suffix出現的時候,取移動距離最大的那個。

最后一個是Sunday算法,實際上比Boyer-Moore還快,呵呵。長江后浪推前浪。

原始論文:Daniel M. Sunday, A very fast substring search algorithm, Communications of the ACM, v.33 n.8, p.132-142, Aug. 1990

看原始論文的題目,D.M. Sunday貌似是故意想氣氣Boyer-Moore兩位大牛似的。呵呵。不過實際上的確Sunday算法的確比BM算法要快,而且更簡單。

Sunday的算法思想和Horspool有些相似,但是。當出現不匹配的時候,卻不是去找匹配串中不匹配的字符在模式串的位置,而是直接找最右邊對齊的右一位的那個字符在模式串的位置。

比如:

匹配串:abcbczdxzc

模式串:zbcac

恩,這里我們看到b-a沒有對上,我們就看匹配串中的z在模式串的位置,然后,嘿嘿。

匹配串:abcbczdxzc

模式串: zbcac

如果模式串中的沒有那個字符怎么辦呢?很簡單,跳過去唄。

匹配串:abcbcedxzcs

模式串:zbcac

e不在模式串中出現

那么我們就

匹配串:abcbcedxzcs

模式串: zbcac

 

實際上,現在還有很多很多字符串匹配算法,這里只是簡單介紹了一下最常使用的五種算法,更多算法可以參考一下http://www.inf.fh-flensburg.de/lang/algorithmen/algo.htm,8過這個是德文網站,有的網頁沒有英文版的哦。

posted on 2013-05-19 16:58 郭龍 閱讀(756) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   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>
            一区二区三区不卡视频在线观看| 欧美激情一区二区| 午夜久久久久久| 中文久久精品| 亚洲美女性视频| 亚洲区在线播放| 亚洲丰满在线| 亚洲大胆人体在线| 国产视频丨精品|在线观看| 欧美日韩在线视频一区| 欧美日韩高清免费| 欧美激情一区在线| 欧美激情视频一区二区三区免费| 狂野欧美激情性xxxx欧美| 久久久久免费观看| 久久另类ts人妖一区二区| 久久亚洲一区二区| 免费观看成人网| 免费观看久久久4p| 欧美激情精品久久久久久| 欧美激情乱人伦| 欧美日本一区二区三区| 欧美日韩亚洲视频| 国产精品久久久久久久第一福利| 国产精品福利在线| 国产伦一区二区三区色一情| 国产欧美一区二区精品秋霞影院| 国产欧美日韩免费看aⅴ视频| 国产精品影片在线观看| 国产日韩成人精品| 伊人精品成人久久综合软件| 亚洲国产婷婷综合在线精品 | 欧美—级a级欧美特级ar全黄| 欧美激情国产日韩| 欧美三区在线观看| 国产精品视频精品视频| 国产一区二区三区四区| 精品成人国产在线观看男人呻吟| 亚洲高清免费| 亚洲一区成人| 久久精品亚洲精品| 欧美搞黄网站| 一区二区三区你懂的| 亚洲欧洲美洲综合色网| 亚洲一区在线观看免费观看电影高清| 欧美一级欧美一级在线播放| 久热精品视频在线观看一区| 欧美精品一区二区三区在线播放| 欧美性猛交一区二区三区精品| 国产欧美日韩免费| 亚洲精品男同| 亚洲一区综合| 麻豆精品视频| 亚洲老板91色精品久久| 一本久久a久久精品亚洲| 午夜亚洲福利| 欧美国产丝袜视频| 国产精品一区二区久激情瑜伽| 怡红院精品视频在线观看极品| 99热精品在线观看| 久久久久久97三级| 日韩一级精品| 久久尤物电影视频在线观看| 国产精品激情av在线播放| 在线成人欧美| 午夜精品在线观看| 亚洲国产1区| 久久成人国产| 国产精品久久久久7777婷婷| 伊人成人在线| 一区二区三区久久精品| 久久综合电影一区| 亚洲图片在区色| 欧美成人国产| 激情亚洲网站| 欧美一区二区三区在线| 亚洲乱码久久| 麻豆成人在线播放| 国产亚洲激情| 午夜激情综合网| 亚洲精品久久久一区二区三区| 久久久成人网| 国产精品一二三视频| 一本色道久久综合亚洲精品不卡| 久久这里只精品最新地址| 亚洲一区免费视频| 欧美日韩免费区域视频在线观看| 亚洲激情偷拍| 免播放器亚洲一区| 欧美伊人久久大香线蕉综合69| 国产精品成人一区二区三区夜夜夜| 今天的高清视频免费播放成人| 亚洲欧美日本精品| 91久久精品一区二区别| 米奇777在线欧美播放| 国产自产2019最新不卡| 亚洲综合电影| 亚洲美女av电影| 欧美巨乳在线观看| 亚洲国产美女久久久久| 久久久精品一区二区三区| 亚洲一区二区三区四区视频| 欧美三级中文字幕在线观看| 一区二区三区四区精品| 亚洲七七久久综合桃花剧情介绍| 欧美.www| 亚洲精品日日夜夜| 欧美激情一区二区三区蜜桃视频 | 亚洲国产精品一区二区第一页 | 亚洲午夜极品| 欧美午夜不卡| 亚洲天堂av在线免费| 日韩一级黄色片| 欧美色视频在线| 亚洲女优在线| 亚洲资源在线观看| 国产精品入口日韩视频大尺度| 亚洲欧美日韩爽爽影院| 亚洲一区免费在线观看| 欧美色区777第一页| 亚洲夜间福利| 亚洲在线中文字幕| 国产免费观看久久黄| 久久精品国产久精国产爱| 性做久久久久久| 韩国精品在线观看| 免费日韩成人| 美女诱惑黄网站一区| 亚洲国产精品一区| 亚洲激情黄色| 国产精品va在线播放我和闺蜜| 亚洲综合清纯丝袜自拍| 亚洲欧美日韩在线高清直播| 韩国三级电影久久久久久| 欧美成人激情在线| 欧美精品在线观看播放| 亚洲欧美日韩国产综合精品二区| 亚洲一区二区三区久久 | 亚洲国产欧美日韩| 91久久久久| 国产精品免费一区二区三区在线观看| 欧美一级午夜免费电影| 久久精品视频免费播放| 亚洲黄色三级| 中文有码久久| 国内精品久久久久国产盗摄免费观看完整版 | 国产日韩av一区二区| 免费在线国产精品| 欧美日韩亚洲高清一区二区| 欧美一乱一性一交一视频| 久久久久久999| 日韩亚洲欧美精品| 亚洲欧美激情一区| 亚洲精品美女久久7777777| 午夜精品区一区二区三| 日韩视频亚洲视频| 久久aⅴ国产欧美74aaa| 亚洲图片在区色| 久久综合中文字幕| 欧美在线影院在线视频| 欧美精品在线极品| 麻豆精品精华液| 国产欧美 在线欧美| 亚洲国产一区二区视频| 狠狠色综合网| 亚洲一区二区三区午夜| 99精品欧美一区二区三区综合在线| 久久精品99国产精品| 午夜精品久久久久久久99樱桃| 欧美韩国一区| 欧美77777| 国产一区日韩欧美| 亚洲小少妇裸体bbw| 艳女tv在线观看国产一区| 久久久久久久久久看片| 欧美在线一二三四区| 欧美亚韩一区| 亚洲伦理网站| 亚洲精品欧美精品| 美女在线一区二区| 欧美+日本+国产+在线a∨观看| 国产区亚洲区欧美区| 亚洲无玛一区| 亚洲在线成人精品| 欧美日韩一区国产| 日韩午夜av在线| 99成人免费视频| 欧美日本一区| 日韩视频一区二区在线观看| 亚洲人体大胆视频| 欧美插天视频在线播放| 欧美丰满高潮xxxx喷水动漫| 亚洲大胆在线| 久色成人在线| 亚洲成人在线免费| 久久蜜桃精品| 欧美www视频在线观看| 伊人狠狠色j香婷婷综合| 久久九九99| 免费成人黄色片|