找到min和的算法;数组中方程的最大值

时间:2013-04-30 14:06:41

标签: algorithm excel excel-vba vba

我有一个8 int,4 positive和4 negative的数组。

X [10,-2,30,-4,5,-20,8,-9]

现在,让

Evaluated = a-b+c-d+e-f+g-h

其中a,b..h是取自X的唯一值。 我需要确保

案例1.评估=最接近零 案例2.通过解决Evaluated来列出最大的可能性。         我可以通过对数组进行排序并将最大值分配给a,c,e和g以及最小值b,d,f和h来找到最大值。但是如何找到接下来的4个值?

有8个!解决这个等式的方法对吗?

确定此解决方案的最佳方法是什么?

3 个答案:

答案 0 :(得分:5)

确保负值为正号,正值为负号。您将获得尽可能小的价值。你甚至不需要排序。

一种简单的做法是......

Loop Each Element of X

    if X[i] > 0 Then X[i] = -1 * X[i]

End Loop

Add all elements of X (yes just don't think about subtracting, just add)

结果总和是可能的最小值。

答案 1 :(得分:1)

只需选择a,c,e,g作为最小值,其余为最大值。

Excel中的函数Small可能会对您有所帮助。

答案 2 :(得分:1)

如果我正确理解了这个问题,你就有一个包含八个数字的数组。您想要选择要添加的四个数字,并选择四个要减去的数字以获得尽可能小的结果。我将按如下方式进行:

  1. 排序数组从最小到最大。 This article描述了两种方法。在您的示例中,排序的数组将具有[-20,-9,-4,-2,5,8,10,30]。
  2. 添加数组中的前四个值。
  3. 减去最后四个值。
  4. 这将通过添加四个值并减去八个数组中的剩余值来为您提供最小的结果。