近似模式匹配 查詢匹配問題

2021-05-17 18:48:27 字數 735 閱讀 6216

一、搜尋乙個模式在文字中的所有近似出現

輸入:模式p=p1p2..pn,文字t=t1t2...tm以及引數(它是最大錯配數)。

輸出:所有位置1<=i<=m-n+1,使得titi+1....ti+n-1與p1p2...pn至多有k個錯配(即:dh(ti,p)<=k)

二、查詢匹配問題

找到所有與文字近似匹配的查詢的子字串

輸入:查詢序列q=q1...qp,文字t=t1...tm,以及整數n和k

輸出:所有配對位置(i,j),其中1<=i<=p-n+1,1<=j<=m-n+1,使得q中第i個位置起的長為n的子字串與文字t中從第j個位置起的長為n的子字串匹配,其中最多有k個錯配。

當p=n時,查詢匹配問題成為乙個允許k個錯配的近似字串匹配問題。

三、l-元組過濾技術

如果乙個查詢的n字元子字串與文字中長為n的子字串近似匹配,對足夠大的l來說,2個子字元口中 至少共享乙個l元組。

如果字串x1x2...xn和y1y2...yn相匹配,其最大錯配數為k那麼它們共享乙個l-元組,其中l=|n/(k+1)|即:xi+1..xi+l=yi+1..yi+l,其中1<=i<=n-l+1

l元組過濾演算法如下:

1)潛在匹配檢測。找到查詢和文字中所有的l元組匹配,其中l=|n/(k+1)|

2)潛在匹配驗證。通過向左向右延伸檢驗每個潛在的匹配,直到第一次發現k+1個錯配(或者到達查詢或文字的2端)

潛在匹配的檢測可利用雜湊表方法或者字尾樹方法來實現

近似模式匹配 查詢匹配問題

一 搜尋乙個模式在文字中的所有近似出現 輸入 模式p p1p2.pn,文字t t1t2.tm以及引數 它是最大錯配數 輸出 所有位置1 i m n 1,使得titi 1.ti n 1與p1p2.pn至多有k個錯配 即 dh ti,p k 二 查詢匹配問題 找到所有與文字近似匹配的查詢的子字串 輸入 ...

演算法 字串匹配 BF KMP 近似匹配

include includeusing namespace std define maxstr 100 bf 時間o n m int stringmatch bf char str,char pat o m n m str n pat else if pat j 0 找到匹配位置 return i...

模式串匹配問題

問題描述 給出模式串p和文字串t 有以下問題 1 模式串是否出現在文字串。2 文字串中出現模式串的所有位置。3 模式串在文字串出現的次數。暫時想不出那麼多 對於上述的每個問題都可以逐個字元比較來找出答案。如下 for int i 0 i 顯然上述演算法的時間複雜度是o n m 對於k個模式串問題時,...