是否存在用于找到行子集的最佳算法,该行子集在指定间隔内?

时间:2019-01-30 07:56:36

标签: algorithm

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

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

我需要找到行的子集,例如:

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

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

1 个答案:

答案 0 :(得分:2)

这似乎是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解算器解决每个系数和的任务
(也许有一种方法可以避免循环求和,但我不知道合适的条件)