【发布时间】:2015-07-27 12:45:38
【问题描述】:
对于每个长度为 n+h-1 且值从 0 到 1 的数组,我想检查是否存在另一个长度为 n 且值从 -1,0,1 的非零数组,以便所有的 h内积为零。我的天真方法是
import numpy as np
import itertools
(n,h)= 4,3
for longtuple in itertools.product([0,1], repeat = n+h-1):
bad = 0
for v in itertools.product([-1,0,1], repeat = n):
if not any(v):
continue
if (not np.correlate(v, longtuple, 'valid').any()):
bad = 1
break
if (bad == 0):
print "Good"
print longtuple
如果我们设置 n = 19 和 h = 10 这是我想要测试的,这会非常慢。
我的目标是找到一个长度为
n+h-1的“好”数组。有没有 如何加快速度,使n = 19和h = 10可行?
当前的幼稚方法需要 2^(n+h-1)3^(n) 次迭代,每次迭代大约需要 n 次。那是 n = 19 和 h = 10 的 311,992,186,885,373,952 次迭代,这是不可能的。
注意 1 将 convolve 更改为 correlate 以便代码正确地考虑 v。
2015 年 7 月 10 日
问题仍然存在,没有足够快的解决方案来解决 n=19 和 h=10 的问题。
【问题讨论】:
-
按照这个定义,只有零的数组不是很好吗?
-
“另一个长度为 n 的非零数组”根据 OP
-
"对于每个长度为 n+h-1 且值从 0 到 1 的数组,我想检查是否存在另一个长度为 n 且值从 -1,0 的非零数组, 1 使得所有的 h 内积都为零”这两个数组之间究竟是什么关系?
-
什么是“h 内积”? ——我想我明白你的意思,但你应该澄清一下。您想考虑第二个数组的所有移位 0, .., h 索引向右并取第一个数组的内积
-
你能用文字解释一下吗?如果我不了解您的需求,我就无法理解您的代码
标签: python algorithm math numpy optimization