在具有变化值的两个阵列之间插值

时间:2017-02-21 22:38:20

标签: algorithm computer-science

我不知道是否有这种问题的名称,更不用说解决方案了,所以我所能做的就是尽力描述它。

假设我有一个处于以下状态的数组:

[0,0,3,0]

稍后,数组中的值已更改为:

[5,0,0,0]

让我们调用旧状态 A 和新状态 C 。我们希望找到一个状态 B ,它代表两者之间的中间形式。

我真正想要的中间形式是 [0,4,0,0] ,这样所有三个阶段的状态变化都代表了改变位置和价值的动作。

简单地平均这两种状态是行不通的,因为这会产生以下中间形式: [2.5,0,1.5,0] ,这是我所追求的错误表示。< / p>

另一个例子:

A:[0,2,0,0,0,6]

C:[0,4,0,8,0,0]

中间表格应为:

B:[0,3,0,0,7,0]

部分问题是我无法定义问题。很清楚在给定输入的情况下我想要什么结果,但我似乎无法使用足够精确的语言来描述输入结果。

根据输入描述结果的正确方法是什么,以便我能更好地表达问题?

最终,是否有一种能够产生我所追求的算法?

2 个答案:

答案 0 :(得分:0)

这适用于您的两个测试用例。

def avg(l1, l2, base=0):
    ans = []
    L = len(l1)
    i = 0
    while i < L:

        e1 = l1[i]
        e2 = l2[i]

        if e1 != base or e2 != base:
            left = i
            if e1 != base:
                first = l1
                second = l2
            else:
                first = l2
                second = l1

            while i < L and second[i] == base:
                i += 1

            ans += [base] * (i - left + 1)
            avg_idx = (left + i) // 2
            avg_val = (first[left] + second[i]) / 2
            ans[avg_idx] = avg_val

        else:
            ans.append(base)


        i += 1

    return ans

print(avg([0, 0, 3, 0], [5, 0, 0, 0])) # [0, 4.0, 0, 0]
print(avg([0, 2, 0, 0, 0, 6], [0, 4, 0, 8, 0, 0])) # [0, 3.0, 0, 0, 7.0, 0]
print(avg([2,2,3,2], [5,2,2,2], base=2) # [2, 4.0, 2, 2]

答案 1 :(得分:0)

虽然我没有&#34;明确的情况&#34; (可能的向量状态),我假设如果输入向量中的两个元素大于零,则只能在两种情况下:

a)i == j
b)i == j + 2(或通常:(i + j)%2 = 0

i:v1中元素的索引
j:v2中元素的索引

在这种情况下,此伪代码可能会产生所需的结果:

vector v1, v2;
vector v3 = [0];  --all zeros in resultant vector 
pos1 = pos2 = -1; --position of elements in vectors
for (i = 0; i < size(v1); i++)
    {
    if (v1(i) > 0)
       pos1 = i;     
    if (v2(i) > 0)
       pos2 = i;
    if (pos1 >= 0 && pos2 >= 0)
       {
       pos3 = pos1 + pos2;
       if ((pos3 % 2) != 0)   
          {
          --how to handle this?
          --error? 
          } 
       pos3 = pos3/2;
       v3(pos3) = (v1(pos1) + v2(pos2) )/ 2;                   
       pos1 = pos2 = -1;
       }
    }

v3是结果向量,即具有&#34;内插&#34;值。 它应该适用于你提出的案例......我希望如此:)