Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 模糊比特匹配_Algorithm_Fuzzy Search - Fatal编程技术网

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有效。