Horspool 字串匹配 演算法

2021-07-11 13:04:26 字數 1213 閱讀 4548

horsepool演算法是boyer-moore演算法的簡化版本,這也是乙個空間換時間的典型例子。演算法把模式p和文字t的開頭字元對齊,從模式的最後乙個字元開始比較,如果嘗試比較失敗了,它把模式向後移。每次嘗試過程中比較是從右到左的。

假設文字中,對齊模式最後乙個字元的元素是c,horspool演算法根據c的不同情況來確定移動距離,無論c是否和模式的最後乙個字元相匹配。

一般來說,會存在下面四種情況。

情況1:看第一行,模式中不存在c(此時c就是字母a),模式的移動長度就是它的全部長度,移到第二行所示的位置。

情況2:看第二行,c(此時c就是字元o)正好是模式的最後乙個字元,但是從右向左比較時,有字元不匹配,比如此時的ae不匹配。而且模式中的其他m-1個字元也不包含c。移動的情況類似情況1,移動的幅度等於模式的全部長度,移到第三行所示的位置。

情況3:看第一行,模式中存在c(此時c就是字元l),但是它不是模式的最後乙個字元,移動時應該把模式中最右邊的c和文字中的c對齊,移到第二行所示的位置。

情況4:看第二行,c(此時c就是字元o)正好是模式的最後乙個字元,但是從右向左比較時,有字元不匹配,比如此時的ae不匹配。而此時模式中的其他m-1個字元包含c。移動的情況類似情況3,移動時應該把前m-1個字元中最右邊的c和文字中的c對齊,移到第三行所示的位置。

這說明,比起蠻力演算法每次總是移動乙個位置,從右到左的字元比較使模式模式移動得更遠。然而,如果在每次嘗試時都必須檢查模式中的每個字元,它的優勢也會喪失殆盡。我們可以預先算出遇到某個字元要移動的距離,並把它存在乙個表中。具體來說,對於每乙個字元c,可以通過以下公式算出移動距離:t(

c)= int i = m - 1;

while(i <= n - 1)

return -1;//匹配失敗

}

字串匹配演算法 Horspool演算法

horspool 字串匹配演算法對boyer moore演算法的簡化演算法。horspool 演算法是一種基於字尾匹配的方法,是一種 跳躍式 匹配演算法,具有sub linear亞線性時間複雜度。horspool 演算法 對於每個搜尋視窗,該演算法將視窗內的最後乙個字元和模式串中的最後乙個字元進行比...

字串匹配演算法 字串匹配演算法總覽

字串匹配在文字處理裡非常重要,我們採用簡潔的python 把以下演算法一一實現並講解。樸素演算法 algorithm rabin karp 演算法 有限自動機演算法 finite automation knuth morris pratt 演算法 kmp algorithm boyer moore ...

字串匹配演算法

首先引用一下另一篇文章中對字串匹配的介紹 字串匹配指的是從文字中找出給定字串 稱為模式 的乙個或所有出現的位置。本文的演算法一律輸出全部的匹配位 置。模式串在 中用x m 來表示,文字用y n 來,而所有字串都構造自乙個有限集的字母表 其大小為 根 據先給出模式還是先給出文字,字串匹配分為兩類方法 ...