2013-09-27 127 views
11

我有一個非常長的比特序列,稱爲A,以及一個較短的比特序列,x。在對齊它們之後,具有相同長度的兩個比特序列是模糊匹配的,有k或更少的不匹配比特。我想在A中找到所有這種模糊發生的x。模糊比特匹配

到目前爲止,我已經嘗試過這種天真的方法。循環遍歷A,然後對於每一位,遍歷x的長度,計算從A中該位置開始的不匹配位數,如果不超過k,則報告該位置。這個算法效率不高。如果A有n_A位,而x有n_x位,則運行時間爲O(n_A * n_x)

我被告知,這可以在O(n_A * log(n_A))完成,不管k。提供的提示是利用快速傅里葉變換。請記住,對於兩個輸入enter image description hereenter image description here,卷積產生enter image description here其中

qqn

類似於多項式乘法。我不清楚如何使用這個提示。任何幫助將非常感激。

回答

4

反轉x,用(-1)** b替換每個位b並進行卷積。我會讓你解釋你的作業下一步該做什麼。

+0

太棒了!謝謝。它現在很有意義:) – darksky

+0

我認爲你這裏的意思只是用-1代替0。所以實際上,我們應該用 - ( - 1)^ b來代替位b。但我使用這個技巧解決了問題。我會在幾天後發佈我自己的解決方案,以解釋爲什麼如果沒有人回答它的工作原理。 – darksky

+0

很抱歉摧毀了'4444'的真棒分數,但這是一個很好的暗示 - 並且顯然對於OP來說非常有用。 – Floris