Karmarkar-karp 差分算法如何工作?

bla*_*ter 6 algorithm

有人能给我 karmarkar-karp 差分算法的伪代码吗,我不明白。如果有可视化/演示就更好了。

lyf*_*ing 5

它还首先按降序对数字进行排序。

这是列表 [8,7,6,5,4] 的排序结果

在每一步中,算法都会致力于将两个最大的数字放入不同的子集中,同时推迟决定每个数字将进入哪个子集。
在上面的示例中,如果我们将 8 放入左侧子集中,将 7 放入右侧子集中,这相当于将它们的差值 1 放入左侧子集中,因为我们可以从两个子集中减去 7 而不会影响最终的差值。类似地,将 8 放入右子集中,将 7 放入左子集中,相当于将 1 放入右子集中。该算法删除两个最大的数字,计算它们的差异,然后像对待任何其他要分配的数字一样处理差异,将其按排序顺序插入到剩余的数字列表中。该算法继续删除两个最大的数字,用它们在排序列表中的差值替换它们,直到只剩下一个数字,即最终子集差值的值。

例如,给定已排序的整数 (8,7,6,5,4),8 和 7 被替换为它们的差值 1,并将其插入到剩余列表中,结果为 (6,5,4,1) 。接下来,将 6 和 5 替换为它们的差 1,得到 (4,1,1)。将 4 和 1 替换为它们的差 3,得到 (3,1),最后最后两个的差numbers 是最终的子集差值 2。在这种情况下,KK 启发式也无法找到最佳划分,但比贪婪启发式更好。

数字分区问题 下载PDF