partition problem(或数字分区1)是其任务 判断一个正整数的给定多集S是否可以 分成两个子集S1和S2,使得它们的总和 S1中的数字等于S2中数字的总和。
这个问题有一个贪婪的算法:
解决问题的一种方法,模仿儿童选择团队的方式 对于一个游戏,是贪婪的算法,它遍历了 数字按降序排列,将每个数字分配给任何一个 子集的总和较小。这种方法的运行时间为O(n 记录n)。这种启发式方法在实践中很有效 集合的大小与其基数大致相同或更小,但确实如此 不能保证产生最好的分区。例如, 给定集合S = {4,5,6,7,8}作为输入,这个贪心算法 将S分成子集{4,5,8}和{6,7};但是,S有一个 完全平衡分配到子集{7,8}和{4,5,6}。
但是,我不知道如何证明This heuristic works well in practice when the numbers in the set are of about the same size as its cardinality or less
。有人可以帮忙吗?
答案 0 :(得分:1)
索赔不是一个确切的说法;它只是说如果multiset的元素不比它的基数大很多,那么启发式通常会给出正确的答案,除非你提出了寻找它没有的案例的重点。因此,声明无法真正被证明"原样。
此外,有许多不同的方式可以使 准确无误;并非所有这些方式都必然会产生真正的主张。因此,您无法准确地提出索赔,然后证明这一点。
但是,如果您在之后阅读之后的段落,它会提供 精确的相关声明,即(根据文章)正确,即如果multiset S 可以被分割成两个多重集,其总和都是≤ OPT ,那么这个贪心算法会将它分成两个多重集合,其总和都是≤⁷/ ₆ OPT 。但是,这项索赔与原始索赔不同;它设定了启发式错误的上限,但它并不能保证它完全完全正确,并且它没有对它进行任何引用。元素的价值。