【发布时间】:2010-06-04 22:42:59
【问题描述】:
我有很多数据块。
为了争论,我们会说它们是
File 1 - 150Kb
File 2 - 50Kb
File 3 - 70Kb
File 4 - 60Kb
File 5 - 70Kb
File 6 - 100Kb
File 7 - 90Kb
为了传输,我可以将它们打包成最大 300Kb 的有效载荷。
如果你只是按顺序遍历它们,你会得到
TRANS1: 150Kb + 50Kb + 70Kb = 270Kb - the next file puts you over the limit of 300Kb
TRANS2: 60Kb + 70Kb + 100Kb = 230Kb - the next file puts you over the limit of 300Kb
TRANS3: 90Kb
所以三个单独的传输。
但如果你重新组织它们,你可以发送
Files 1,2,6 together = 300Kb
Files 3,4,5,7 together = 290Kb
因此,您减少了单独传输需求的数量。既然有一个 与每次传输相关的货币成本(这些传输实际上是对第 3 方系统的 API 调用,我们按 API 调用收费)我们希望保留该数字 单独的有效载荷发送到最低限度。
有没有围绕这种优化的排序算法, 这将获取加权对象列表,并对它们进行排序/分组,以便结束 组数最少
作为参考,我会在 .NET 中对此进行编码,但如果您可以提供另一种语言或伪代码实现/描述的示例,那也很好。
谢谢, Eoin C
【问题讨论】:
-
谢谢 Artelius 和 Thariama,这看起来正是我所需要的。非常感激。以前从未听说过“背包问题”这个词。干杯:)
-
感谢Petar,认为您的装箱问题更适合我正在尝试做的事情。两者都会研究。根据记录,最多只会有 7-8 个块,并且在大多数情况下
-
如果它只有 7-8 个块,只需暴力破解所有可能的组合,你会做得很好:)
-
是的,我认为如果没有更多 7 或 8 个元素,最好使用 Petars 方法来创建所有可能的组合
标签: .net algorithm sorting grouping