我有一个列表' n'我想把这些元素分配到两个列表中,每个列表用一个标准与另一个列表进行平衡,评估每个元素的价值。即输出应该是两个列表,其中5个元素彼此近似平衡。
感谢您的时间。
答案 0 :(得分:0)
你可以采用一种贪婪的策略(我不确定这会给你"最佳"结果,但它应该至少给你相对好的结果。)
首先查找列表中所有元素的总值V.目标是创建两个列表,每个列表的值大约为此金额的一半(理想情况下尽可能接近1/2 * V)。从3个列表开始,List_original,List_1,List_2。
从List_original中拉出项目(从最大的开始,一直向下到最小)并将它们放入List_1中,当且仅当将它们添加到List_1时才会导致List_1的总值超过1 / 2 * V。其他一切都进入了List_2。
结果将是List_1最多为1/2 * V,List_2将至少为1/2 * V.如果您的项目的某些子集总计精确到1/2 * V,那么您可能会获得相等。我还没有试图证明/反驳这一点。取决于你的结果接近平衡的程度,这可能足够好(至少应该非常快)。
答案 1 :(得分:0)
我想出了一个快速的“解决方案”,取了列表的完整平均值,然后将其命名为asc,为每个列表取两个最高值,然后与其余列表进行迭代。在每次迭代中,我将完整列表的平均值与两个子列表中的每一个的平均值与添加的迭代进行比较,每次我将迭代元素放入列表中,其中平均值更接近列表的完整平均值。继续这样做,直到列表满了。
我知道这不是最好的选择,但现在已经足够好了。
希望我的解释足够明确。
感谢所有人。