Algorithm 模糊比特匹配
我有一个很长的位序列,叫做Algorithm 模糊比特匹配,algorithm,fuzzy-search,Algorithm,Fuzzy Search,我有一个很长的位序列,叫做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。提供的提示是使用快速傅立叶变换。记住,对于两个输入和
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
。提供的提示是使用快速傅立叶变换。记住,对于两个输入和,卷积产生
类似于多项式乘法。我不清楚如何使用这个提示。任何帮助都将不胜感激 反转x,将每个位b替换为(-1)**b,然后进行卷积。我让你在作业上解释下一步该做什么。太棒了!非常感谢。现在这很有意义:)我想你在这里的意思是用-1代替0。所以实际上,我们应该用-1^b替换位b。但是我用这个技巧解决了问题。我将在几天后发布我自己的解决方案,解释为什么没有人回答时它会起作用。很抱歉破坏了你的精彩分数
4444
,但这是一个很好的提示-显然对OP有效。