假设,我们给定了两个整数序列X [..]和Y [..],它们 具有相同的长度。我们可以选择X []系列的任何位置i 做类似
X[i]=X[i] + 3
,X[i + 2] = X[i + 2] + 2
和X[i + 4] = X[i + 4] + 1
的操作。 在操作了任意次数的序列后,是否有可能 找到与Y [..]类似的系列吗?
我正在考虑通过操纵后的蛮力和正常的组合匹配来实现它。还有其他可以使速度更快的过程吗?
Given two series,
X [ 1, 2, 3 ,4, 5 ,6,8 ]
Y [ 1, 5, 6 ,6, 7 ,7,9 ]
if i=2 then
X [ 1, 5, 3 ,6, 5 ,7,8 ]
Y [ 1, 5, 6 ,6, 7 ,7,9 ]
and if i=3 then
X [ 1, 5, 6 ,6, 7 ,7,9 ]
Y [ 1, 5, 6 ,6, 7 ,7,9 ]
Matches the series.
答案 0 :(得分:2)
您可以看到,对于每个索引p,结果单元格都可以表示为
Y[p] = X[p] + F(p-4) + 2 * F(p-2) + 3 * F[p]
其中F [p]是第p个索引处的运算数。
因此,对于p个未知数Fi,您具有p个线性方程组。
这是三对角(稀疏)系统,可以用一些快速方法或通常的高斯消去法来解决。
系统可能不一致-在这种情况下,没有解决方案
答案 1 :(得分:1)
因为在索引 i 上进行的操作仅修改在索引 i , i + 2 和 i + 4 上存在的元素em>,即所有索引> = i ,我们可以构建一个贪婪算法,该算法从左到右遍历数组X,并在每个索引 i 进行比较数组Y的值。
not possible
,否则计算not possible
并递增m = (Y[i] - X[i])/3
,X[i] by 3 * m
和X[i + 2] by 2 * m
并继续进行迭代。如果我们到达数组X的末尾,则意味着可以使用这些操作从X构造数组Y。
该解决方案的总体时间复杂度为 O(n)。