【发布时间】:2017-01-01 14:35:19
【问题描述】:
对于碎片整理算法,我需要解决以下问题: 给定一组正整数,尽可能多地提取总和为给定值的子集。集合中的每一项只能出现在一个子集中。
贪心算法(迭代正态子集和)不起作用,反例:
collection: 3 5 8 4 5 1 1 1 1 1, targeted sum: 10
1. subset: 5 1 1 1 1 1
there is no other subset
but:
1. subset: 8 1 1
2. subset: 5 4 1
3. subset: 3 5 1 1
如您所见,如果我选择的先前子集不好,则解决方案不是最优的。 我该如何解决这个问题?我已经实现了“正常”子集总和。
编辑:解决方案可能是先使用小子集吗?此外,这个问题与如何找到可能的子集数量的问题没有重复。我想找到尽可能多的不相交子集。
谢谢,菲尔
【问题讨论】:
-
@Druid: 完全不一样,尽管这可以由此构建:这里的解决方案需要是原始集合的一个分区,其元素肯定来自所有可能子集的列表,但可能不仅是一个真子集,而且其中一些子集是重复的。
-
@Druid 我已经编辑了这个问题以消除这个问题的歧义
标签: algorithm optimization sum subset greedy