字串匹配 BDM演算法

2021-08-30 09:56:20 字數 666 閱讀 7768

1、bdm演算法使用字尾自動機搜尋子串。字尾自動機決定字串u是否為模式串p的子串圖示如下:

1)可以在o(|u|)時間內確定個字串u是否為字元p的子串,u是p的子串,當且僅當p的字尾自動機中存在一條要從初始狀態開始的標號為u的路徑,注意該路徑不一定要到達終止狀態。從上圖可看出,cb也是cba的子串。

2)可以識別模式串的所有字尾。從初始狀態到某個終止狀態的路徑上字元組成的字串是模式串p的乙個字尾。

3)模式串p的對應的字尾自動機可以o(m)完成。

2、在文字t=t1 t2 t3。。。。。tn中搜尋模式串p=p1 p2。。。pm

1)首先構建起模式串p的反轉p(rv)=pm p(m-1)....p1對應的字尾自動機,反轉的目的是為了得出p的字首自動機。

2)演算法使用字尾自動機在搜尋視窗中從後向前搜尋模式串的子串。搜尋過程如果到達了終止狀態,並且對應的不是整個模式中,則它在視窗中的位置存在變數last中,此時,可以說找到了當前識別的p的最長字首,因為是p的反轉的最長字尾。該綴從last開始到視窗尾處結束

3、搜尋過程以下2種可能的方式結束:

1)在識別乙個子串時失敗了,即讀入乙個字元σ,在p的反綴自動機的當前狀態沒有σ轉移,這時將視窗向右移動,使得它的起始位置與last對齊

2)抵達了視窗的起始位置,意味著整個模式串p被成功匹配,報告乙個成功匹配,並像1)一樣移動視窗。

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

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

字串匹配演算法

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

字串匹配演算法

平常操作文字的時候,經常需要操作對字串進行操作。而字串中最重要的一種操作就叫匹配,字串的匹配演算法很多,人們最熟悉的莫過於kmp演算法了。今天就來談一談一些字串匹配演算法。先來說說大名鼎鼎的kmp演算法,這個演算法出現在無數的資料結構與演算法書上面。它的策略很簡單 當模式串第k個字元不匹配主串中第s...