一、搜尋乙個模式在文字中的所有近似出現
輸入:模式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個模式串問題時,...