小编cr1*_*ade的帖子

总和小于 N 的最少子集

我有一个特定的子问题,我在想出最佳解决方案时遇到了麻烦。这个问题类似于子集和组问题以及空间填充问题,但我还没有在任何地方看到过这个特定问题。我不一定需要最佳解决方案(因为我相对确定它是 NP 难的),但是有效且快速的近似肯定就足够了。

问题:给定一个正值整数列表,找到包含整个整数列表的最少数量的不相交子集,其中每个子集的总和小于 N。显然原始列表中的任何整数都不能大于 N。

在我的应用程序中,我有许多列表,只要它们适合矩阵,我就可以将它们连接到矩阵的列中。出于下游目的,我希望在生成的参差不齐的矩阵中尽可能少地“浪费”空间,因此空间填充相似。

到目前为止,我采用了一种类似贪婪的方法,从最大整数向下处理,并在限制 N 下找到适合当前子集的最大整数。 一旦最小整数不再适合当前子集,我将继续下一个子集以此类推,直到所有数字都用完为止。这几乎可以肯定没有找到最佳解决方案,但这是我能快速想出的最佳解决方案。

奖励:我的应用程序实际上需要批次,其中每批次 (M) 中的子集数量有限制。因此,更大的问题是找到最少的批次,其中每个批次包含 M 个子集,并且每个子集的总和小于 N。

algorithm matrix subset-sum

5
推荐指数
1
解决办法
534
查看次数

标签 统计

algorithm ×1

matrix ×1

subset-sum ×1