用于规范化数组元素的算法

时间:2014-09-08 10:33:16

标签: arrays algorithm optimization

如果一个数组包含N个元素(元素可以重复),并且目标是使所有元素在元素上等于 +1 并且 -1 在每次迭代中的另一个元素上,我们如何确定是否可以规范化数组?什么是解决问题的最佳算法?

实施例

对于数组1 2 3,如果我在1上应用 +1 而在3上应用 -1 ,则数组将变为2 2 2。这意味着它可以在1次迭代中完成。

对于数组1 2 1,不可能使所有元素都相等。

1 个答案:

答案 0 :(得分:3)

首先,由于每次迭代都不会扰乱总和,因为你增加一个数字而减少另一个数字,最佳目标值将是平均值。

如果这个平均值是一个整数,你应该能够通过迭代实现它,但是如果平均值是一个小数,那么你将无法实现它。

步数将是每个数字与目标之间的距离之和除以2。

每次迭代都会选择一个高于目标的数字,然后选择一个数字并将操作应用于它们。

PS!根据评论,如果你想要的只是以下两个问题的答案:

  1. 可以吗?
  2. 价值是什么
  3. 然后答案是:

    1. 是的,前提是平均数是一个整数
    2. 整个数组中重复的值是平均数
    3. 无论如何,如果你想让实际操作从输入到目标值,这里有一个更长的例子:

      1 2 3 4 5 6 7 = 28, 28/7 = 4 (optimal target)
      +           -
      2 2 3 4 5 6 6
      +           -
      3 2 3 4 5 6 5
      +           -
      4 2 3 4 5 6 4
        +       -
      4 3 3 4 5 5 4
        +       -
      4 4 3 4 5 4 4
          +   -
      4 4 4 4 4 4 4
      

      6个步骤,让我们总计距第一个数字的距离:

      1 2 3 4 5 6 7
      3 2 1 0 1 2 3 = 12, divided by 2 = 6
      

      以下是对该问题的评论中的示例:

       1  9 10 12  3  7 = 42 / 6 = 7 (optimal target)
      

      的距离:

       1  9 10 12  3  7
       6  2  3  5  4  0 = 20, divided by 2 = 10 (steps)
      
       1  9 10 12  3  7
       +  -              step 1
       2  8 10 12  3  7
       +  -              step 2
       3  7 10 12  3  7
       +     -           step 3
       4  7  9 12  3  7
       +     -           step 4
       5  7  8 12  3  7
       +     -           step 5
       6  7  7 12  3  7
       +        -        step 6
       7  7  7 11  3  7
                -  +     step 7
       7  7  7 10  4  7
                -  +     step 8
       7  7  7  9  5  7
                -  +     step 9
       7  7  7  8  6  7
                -  +     step 10
       7  7  7  7  7  7
      

      这是一个更像伪代码的算法描述:

      1. 计算所有元素的总和
      2. 计算所有元素
      3. 如果AVERAGE(SUM / COUNT)不是整数,则无法实现解决方案
      4. STEPS = SUM(ABS(numberN-AVERAGE))/ 2
      5. 每次迭代,选择一个数字低于AVERAGE,一个数字高于
      6. 将+操作应用于下面的数字和 - 操作上面的数字
      7. 重复步骤5和6,直到达到目标