horspool 字串匹配演算法對boyer-moore演算法的簡化演算法。
horspool 演算法是一種基於字尾匹配的方法,是一種「跳躍式」匹配演算法,具有sub-linear亞線性時間複雜度。
horspool 演算法:
對於每個搜尋視窗,該演算法將視窗內的最後乙個字元和模式串中的最後乙個字元進行比較。如果相等,則需要進行乙個校驗過程。該校驗過程在搜尋視窗中從後向前對文字和模式串進行比較,直到完全相等或者在某個字元處不匹配。無論匹配與否,都將根據字元d在模式串中的下乙個出現位置將視窗向右移動。
可以使用下圖進行理解:
(1)視窗大小與模式串大小相同,視窗內容為文字內容的一部分。
(2)對於視窗而言,每次從後向前匹配,直到全部相等(匹配),或者遇到不相等。
(3)遇到不相等時,根據視窗中最後乙個字元在模式串中的位置,視窗進行移動。如果模式串中有多個相同的字元,選擇最後乙個字元為準,以避免漏解。
//計算可跳轉字元個數陣列
void getdis(string &str, int *dis)
//查詢
void search(string &s, string &p, int dis)
else
pos += dis[s[pos + lenp - 1]];//使用最後乙個字元對齊的方法,進行「跳躍」移動
}if(!flag)//不存在匹配
Horspool 字串匹配 演算法
horsepool演算法是boyer moore演算法的簡化版本,這也是乙個空間換時間的典型例子。演算法把模式p和文字t的開頭字元對齊,從模式的最後乙個字元開始比較,如果嘗試比較失敗了,它把模式向後移。每次嘗試過程中比較是從右到左的。假設文字中,對齊模式最後乙個字元的元素是c,horspool演算法...
字串匹配演算法 字串匹配演算法總覽
字串匹配在文字處理裡非常重要,我們採用簡潔的python 把以下演算法一一實現並講解。樸素演算法 algorithm rabin karp 演算法 有限自動機演算法 finite automation knuth morris pratt 演算法 kmp algorithm boyer moore ...
字串匹配演算法
首先引用一下另一篇文章中對字串匹配的介紹 字串匹配指的是從文字中找出給定字串 稱為模式 的乙個或所有出現的位置。本文的演算法一律輸出全部的匹配位 置。模式串在 中用x m 來表示,文字用y n 來,而所有字串都構造自乙個有限集的字母表 其大小為 根 據先給出模式還是先給出文字,字串匹配分為兩類方法 ...