Для каждого массива длины 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 времени. Это 311,992,186,885,373,952 итераций для n = 19
и h = 10
, что невозможно.
Примечание 1 Изменено convolve
до correlate
, так что код считает v
правильным путем.
10 июля 2015
Проблема по-прежнему открыта без решения, достаточно быстрого для n=19
и h=10
.