arrays - 从数组中选择其和为最小可能正数的元素组合

标签 arrays algorithm data-structures selection mathematical-optimization

假设我有一个包含 M 元素的数组,所有元素均为负数、正数或零。

谁能建议一种算法从数组中选择 N 元素,使得这些 N 元素的总和是可能的最小正数?

以这个数组为例:

-1000,-700,-400,-200,-100,-50,10,100,300,600,800,1200

现在我必须选择任意 5 个元素,使得它们的总和是可能的最小正数。

最佳答案

配方

对于 i = 1, ..., M:

  • a_i 成为候选人列表中的第 i 个数
  • x_i 表示第 i 个数字是否包含在您选择的 N 个数字中

然后你想解决下面的整数规划问题。

minimize: sum(a_i * x_i)
with respect to: x_i
subject to:
    (1) sum(a_i * x_i) >= 0
    (2) sum(x_i) = N
    (3) x_i in {0, 1}

您可以将“开箱即用”的整数规划求解器应用于此问题,以找到精度可控的最优解或次优解。

资源

关于arrays - 从数组中选择其和为最小可能正数的元素组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17349268/

相关文章:

algorithm - 在 O(1) 中查找插入删除和 getMin 的数据设计问题

algorithm - 广度优先搜索和层序遍历有什么区别?

java - Java中的LinkedList数据结构

arrays - ARRAYFORMULA 中的 SUMIFS 不起作用

ios - Swift 过滤数组元素

java - 迭代减少到空矩阵

algorithm - 求有多少玩家不能赢得比赛?

python - 稀疏数据的 3D 数组与稀疏矩阵

python - 两个数组累积交集的快速算法

xcode - 将数组保存到 plist