【发布时间】:2011-05-27 15:22:31
【问题描述】:
这是一个难算法问题:
将列表分成两部分(总和),它们的总和彼此最接近(最)
问题中给出的列表长度为 1
例如:23 65 134 32 95 123 34
1.sum = 256
2.sum = 250
1.list = 1 2 3 7
2.list = 4 5 6
我有一个算法,但它不适用于所有输入。
- 初始化。列出 list1 = [], list2 = []
- 对元素进行排序(给定列表)[23 32 34 65 95 123 134]
- 弹出最后一个(最多一个)
- 插入差异较小的列表
实施: list1 = [], list2 = []
- 选择 134 插入列表 1。 list1 = [134]
- 选择 123 插入列表 2。因为如果您插入 list1 差异会变得更大
3. 选择 95 并插入 list2 。因为 sum(list2) + 95 - sum(list1) 更小。
等等……
【问题讨论】:
-
显示您的所有内容,以便其他人可以评论您出错的地方。
-
好的,我现在正在编辑。但是,我正在寻找不同且正确的算法
-
我搜索了,但我没有在 SO 中找到这个问题。谢谢
-
哎呀,我投票决定以完全欺骗的身份结束,现在看到迈克尔建议的问题(虽然仍然高度相关)具有两个列表大小相等的额外限制。
标签: algorithm dynamic-programming knapsack-problem partition-problem