【问题标题】:Multi-way KK differencing algorithm vs. Greedy algorithm?多路 KK 差分算法与贪心算法?
【发布时间】:2015-04-22 07:27:21
【问题描述】:

事实证明,Karmarkar-Karp 的差分算法对于 2-way partitioning 问题(即对n 个整数到 2 个总和相等的子集。这也可以扩展到k-way partitioning吗?如果不是,是否有任何例子表明贪婪在k-way分区中的表现优于KK?

【问题讨论】:

  • 您想如何对三个或更多分区应用差分? !
  • @Lrrr KK 启发式也可以应用于 k-way 分区。给出本文中的示例:ijcai.org/papers09/Papers/IJCAI09-096.pdf 假设我们要将 (8,7,6,5,4) 划分为 3 个相等的子集。这是我们要采取的步骤: - (8,0,0) (7,0,0) (6,0,0) (5,0,0) (4,0,0) - (8, 7,6) (5,0,0) (4,0,0) - (5,0,0) (4,0,0) (2,1,0)* --- * 是归一化的结果- (5,4,0) (2,1,0) - (5,5,2) - (3,3,0) 所以在这个例子中,最终子集之间的差等于 3。

标签: algorithm numbers integer heuristics


【解决方案1】:

KK 的 优势不能 推广到 k 路划分。事实上,更容易给出一个反例贪婪算法表现更好。 让性能度量为最终分区的最大子集总和。 现在,取这组整数:

S = [10 7 5 5 6 4 10 11 12 9 10 4 3 4 5] 和 k=4(划分为 4 个相等的子集)

快进,KK 算法 给出 [28, 26, 26, 26] 的结果,而贪心算法给出 [27, 27, 27, 24] 的最终划分。由于 28 > 27,greedy 在这个例子中表现更好。

【讨论】:

    【解决方案2】:

    提供的 KK 算法解决方案存在问题。

    • 总和 (S) = 105
    • 总和([28, 26, 26, 26]) = 106
    • 总和([27, 27, 27, 24]) = 105

    贪心算法给出的结果

    {{12, 6, 5, 4}{11, 7, 5, 4}{10, 10, 4, 3}{10, 9, 5}}
    [27, 27, 27, 24]
    

    KK算法给出的结果

    {{5, 12, 6, 4}{5, 10, 7, 4}{5, 11, 10}{4, 3, 10, 9}}
    [27, 26, 26, 26]
    

    由于最高和相等 (27=27) 且 KK 的最低和大于贪心算法的 (26>24),因此 KK 算法的性能更好。在某些情况下,贪心算法仍然可以比 KK 表现更好,但这个例子不是其中之一。

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 2021-11-19
      • 2022-12-07
      • 2019-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-04
      • 2013-01-20
      相关资源
      最近更新 更多