模式匹配基本概念
在乙個較長的n個字串(稱為文字)中,尋找乙個給定的m個字元的串(稱為模式)。
horspool演算法:在蠻力法模式匹配演算法中,如果遇到了一對不匹配字元,我們需要把模式右移。如果不存在錯過文字中乙個匹配子串的風險,我們希望移動的幅度盡可能地大。假設文字中對齊模式最後乙個字元的元素是字元c,horspool演算法根據c的不同情況來確定移動的距離。horspool演算法是boyer-moore演算法的簡化版本(詳見《演算法設計與分析基礎》p195)
boyer-moore演算法:蠻力法模式匹配演算法中最快的乙個,傳說中notepad中查詢用的就是bm演算法。《演算法設計計與分析基礎》( p197)講的非常易懂,直接看一遍可以秒過!
kmp演算法:bm用的是壞符號移動和好字尾移動,匹配是從右到左,而kmp用的是字首函式移動,匹配是從左到右。kmp儘管沒有bm快,但重要的是演算法思想,其字首函式移動正是多模式匹配的ac自動機演算法的基礎。學習過程:先看《演算法導論》( p560),然後可以看matrix67的《kmp演算法詳解》,大牛用另外一種思路來解釋kmp演算法,但實質和算導是一樣的,看看**就知道了,最後看阮一峰的《字串匹配的kmp演算法》,文章用圖示化的方法細述了kmp演算法,一目了然。
kmp基本概念:
kmp是模式匹配演算法中最重要的一種,預備知識要了解模式匹配基本概念、蠻力演算法(詳見《演算法設計與分析基礎》p80)、horspool演算法(詳見《演算法設計與分析基礎》p195)和boyer-moore演算法(詳見《演算法設計與分析基礎》p197)
boyer-moore演算法學習
matrix67 《kmp演算法詳解》
應用拓展:
習題:【bzoj1009】[hnoi2008]gt考試
【wikioi1204】尋找子串位置(kmp)
【cf471d】muh and cube walls
字串匹配 kmp,bm和sunday演算法
先了解一下kmp的核心,跳轉表 跳轉表是對於模式字串而言,即你需要在目標字串匹配到的內容。例如你想在ababdbccbababcd中匹配到baba,那麼baba就是模式字串。下面介紹跳轉表的實現方法 跳轉表的匹配是匹配前字尾,匹配目標是永遠從第乙個字元開始的字串的字串,例如baba這個字串 匹配目標...
shell之匹配模式和擴充套件匹配模式
首先說一下什麼是匹配模式,然後再介紹擴充套件匹配模式。匹配模式這個概念就算不知道,但是也都會使用這個功能找到匹配的檔案。例如 ls ab 找到所有以ab開頭的檔案。這就是利用了 可以匹配任意字串,包括空串。匹配模式是man bash中的pattern matching,星號的含義在上面講了。用來匹配...
模式匹配之Boyer Moore演算法
bm 演算法是乙個較優的模式匹配演算法。一般,如果不考慮模式串的長度,乙個具有時間複雜度o n 的演算法應該是最優的了,但是事實不是如此。bm演算法可以實現更高效率的模式匹配。分析和實驗說明,bm匹配演算法對於那些字符集比較大,而模式串中出現的字元比較少的時候,工作效率最快。而且,考慮kmp匹配方式...