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

时间:2010-10-08 10:50:19

标签: algorithm

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

2 个答案:

答案 0 :(得分:4)

它还首先按递减顺序对数字进行排序。

这是列表[8,7,6,5,4]

的排序结果

在每一步中,算法都会将两个最大的数字放在不同的子集中,同时推迟决定每个子集的位置。
在上面的例子中,如果我们在左子集中放置8,在右子集中放置7,这相当于将它们的差值放在左子集中,因为我们可以减去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)和 最后,这两个数字的差异是最终的子集差异 2。 在这种情况下,KK启发式也无法找到最佳分区,但是比贪心启发式更好。

号码分区问题 Download PDF

答案 1 :(得分:2)