有人能给我karmarkar-karp差分算法的伪代码,我不明白。如果有可视化/演示,那就更好了。
答案 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)