【发布时间】:2014-03-27 09:26:19
【问题描述】:
我需要执行布尔卷积;即位向量的卷积,其中:
- OR 是“加法”运算
- AND 是“乘法”运算
有没有我可以使用的算法(可能类似于 FFT)以比二次方时间更快的速度执行此操作?
我研究过“数论变换”(NTT),但它们似乎是模算术的傅立叶模拟(在加法时回绕),而不是布尔算术(在加法时饱和)。
我知道的最佳选择是通过浮点 1 和 0 的向量来近似它,并简单地使用 FFT 并在某个截止值处对结果进行阈值化,但这可能容易出错(并且可能比必要的慢,虽然错误是我更关心的问题)。
(无论如何,我想知道是否有一种“正确”的方法可以做到这一点,尽管有这种潜在的选择。)
【问题讨论】:
-
您确定要使用 OR 表示“加法”吗?通常,AND 和 XOR 会在布尔值上为您提供环结构...
-
注意:我看到了一些优化机会:1)如果你使用OR,你可以短路。 2)您可以在窗口(或两个窗口)中保留 0s/1s 的计数,当它全部为 0s/1s 时,您就知道该离散点的结果。
-
@Krystian:是的;我不是在这里寻找环形结构。所以这意味着
convolve([1], [1])对于我的应用程序肯定应该是[1]。 -
@KarolyHorvath:我不确定你的意思。你在考虑游程编码吗?如果你是,我认为虽然在某些情况下它非常有效,但在其他情况下它可能是二次的。如果没有,那么我想我没有理解你的意思。
-
1) 正如你所说,加法饱和。一旦达到 1,它就会一直停留在那里,所以不需要计算这个值的其余操作
标签: algorithm boolean fft convolution