操纵后两个系列之间的匹配

时间:2018-10-17 07:21:42

标签: algorithm data-structures dynamic-programming

  

假设,我们给定了两个整数序列X [..]和Y [..],它们   具有相同的长度。我们可以选择X []系列的任何位置i   做类似X[i]=X[i] + 3X[i + 2] = X[i + 2] + 2X[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.

2 个答案:

答案 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的值。

  • 情况 X [i] > Y [i] :则无法将X [i]更新为Y [i],因此返回{{1} }。
  • 情况 X [i] == Y [i] :然后继续迭代 i +1
  • 情况 X [i] < Y [i] :如果(Y [i]-X [i])mod 3!= 0 ,然后返回not possible,否则计算not possible并递增m = (Y[i] - X[i])/3X[i] by 3 * mX[i + 2] by 2 * m并继续进行迭代。

如果我们到达数组X的末尾,则意味着可以使用这些操作从X构造数组Y。

该解决方案的总体时间复杂度为 O(n)