谁能给我 karmarkar-karp 差分算法的伪代码,我不明白。如果有它的可视化/演示就更好了。
最佳答案
它也以降序排列数字开始。
这里是列表[8,7,6,5,4]的排序结果
在每一步,算法都会将两个最大的数字放在不同的子集中,同时推迟决定每个数字将进入哪个子集。
在上面的例子中,如果我们将 8 放在左子集中,将 7 放在右子集中,这相当于将它们的差值 1 放在左子集中,因为我们可以减去 7
来自两个子集而不影响最终差异。同样,放置 8
在右子集中放置 7,在左子集中放置 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
关于algorithm - Karmarkar-karp 差分算法如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3889783/