algorithm - 是否有最佳算法来查找行的子集,其总和位于指定的间隔内?

标签 algorithm

我有一个矩阵,40 行 8 列,具有非负 float ,并且有 16 个浮点阈值:

S_min1, S_min2, ..., S_min8
S_max1, S_max2, ..., S_max8

我需要找到行的子集,这样:

  • 第一列的总和介于 S_min1S_max1 之间
  • 第二列的总和介于 S_min2S_max2 之间
  • ...
  • 第八列的总和介于 S_min8S_max8 之间

有什么办法可以避免穷举算法吗?因为遍历 10^12 组合看起来不太好。

最佳答案

看起来像是 linear programming 的任务.

您为每一行定义整数系数 0/1,它们的总和应在 1..40 范围内。

然后使用这些系数和单元格值以及您的阈值来定义不等式。

  A[1,1]*R[1] + A[1,2]*R[2] +... + A[1,40]*R[40] > S_Min1
  A[1,1]*R[1] + A[1,2]*R[2] +... + A[1,40]*R[40] < S_Max1
  ...

使用一些可用的 LP 求解器解决每个系数和的任务
(也许有一种方法可以避免遍历可能的总和,但我不知道合适的条件)

关于algorithm - 是否有最佳算法来查找行的子集,其总和位于指定的间隔内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54435710/

相关文章:

c++ - 有人可以用更好的逻辑编写这段代码吗?

algorithm - G的节点与DFT的深度优先遍历关系

algorithm - 大欧米茄和大西塔

algorithm - 桶排序运行时间

c# - C# 中的快速数组移位实现?

algorithm - CSES 问题集酒店查询得到错误答案

algorithm - 独特的最大流量算法

algorithm - 带中断的循环不变量

algorithm - 如何找到稀疏向量的最近邻

algorithm - 计算n位字符串的数量,以使在字符串的每个前缀中,零的数量至少是k的数量的k倍