模式匹配之Kmp BM專題

2021-06-27 01:12:15 字數 887 閱讀 5509

模式匹配基本概念

在乙個較長的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匹配方式...