2009-11-29 96 views
2

簡單地說,我已經查看了bitap算法的幾個實現,但是他們所做的一切都是找到模糊匹配的開始點。我需要的是找到一個匹配。這裏有一個例子:使用bitap算法尋找模糊匹配

說,我們有以下文字:ABCDEFG

和模式:bzde

,我們希望在文本中發現有至多錯誤(編輯距離的模式的所有發生難度concidered )。

所以我需要該算法返回:bcde。

是否有一個簡單的(或不簡單=))方法來做到這一點? 關於這種算法的原始文章並沒有回答這個問題。

謝謝你的幫助。

+0

這是功課嗎?如果是這樣,請標記爲這樣。 – rsp 2009-11-29 12:55:21

回答

1

對於一個簡單的開始,你可以用一系列正則表達式來處理它,其中在每個表達式中用.通配符替換1個字符。將這些表達式合併爲一個使用(|)構造的表達式來創建一個大的正則表達式。

另一種方法是掃描字符串並保存errorcount,並在遇到太多錯誤時增加匹配的偏移量。

+0

謝謝你的回答。 1.我認爲用正則表達式的方法不會有用。讓我們考慮一個情況,即刪除或插入作爲編輯操作。在這種情況下,我們不需要'。'在我們的正則表達式中,像'。{0,2}'這樣的東西,我們將面臨更多的問題,尤其是當我們允許的錯誤數大於1時。 2.據我瞭解,我們應該看看矩陣d_k和d_(k + 1),我們應該知道從d_k到d_(k + 1)(插入,刪除等)的編輯操作。這樣對嗎? – StuffHappens 2009-11-30 07:34:58

+1

bitap方法提供了匹配的開始,一旦您知道匹配開始於該索引,找到結束更容易。您可以比較匹配和搜索字符串,直到錯誤數量過大或搜索字符串結束。如果您想從bitap算法本身派生末尾索引,請查看它決定返回匹配的位置以及上次檢查的索引。 – rsp 2009-11-30 09:45:41

+0

再次感謝... – StuffHappens 2009-11-30 10:06:06