我试图找出问题是什么与实施我的算法,以合并N
黄金矿井K
尽可能最小的成本,其中从一个矿到另一个金合并成本等于距离在他们之间乘以源矿中黄金的重量。我的算法这个算法有什么缺陷?
例子:
比方说,我们有以下N=3
矿山
A = { Distance = 10, Gold = 2 }
B = { Distance = 12, Gold = 1 }
C = { Distance = 15, Gold = 1 }
,我们希望金合并为K=1
地雷。第一次合并黄金的成本如下。
Cost(B,A) = |12 - 10| * 1 = 2
Cost(B,C) = |12 - 15| * 1 = 3
Cost(C,B) = |15 - 12| * 1 = 3
Cost(A,B) = |10 - 12| * 2 = 4
Cost(C,A) = |15 - 10| * 1 = 5
Cost(A,C) = |10 - 15| * 2 = 10
因此,让我们第一次盘整是黄金摆脱B
到A
。
我们的总成本是2
,我们的矿山看起来像
A = { Distance = 10, Gold = 3 }
C = { Distance = 15, Gold = 1 }
我们为了成本
Cost(C,A) = |15 - 10| * 1 = 5
Cost(A,C) = |10 - 15| * 3 = 15
(注意我们是如何从我们的任何费用,涉及B
列表中删除,因为它现在已经不存在了。)
我们的下一个合并也是有序成本列表中的第一个元素。
作出整固,折叠移动从C
到A
后,我们的总成本目前是2 + 5 = 7
,我们的矿山
A = { Distance = 10, Gold = 4 }
由于该组的大小为K=1
的,我们就大功告成了。
泛化伪代码:
Mines = list of mines,
K = desired number mines,
sum = 0
while(Mines.Count != K)
{
Find m1,m2 in Mines such that Cost(m1,m2) is minimized
sum += Cost(m1,m2)
m2.Gold += m1.Gold
Mines.Remove(m1)
}
有人能告诉我为什么不行?
相关(后续?):http://stackoverflow.com/questions/38711479/where-is-the-flaw-in-my-algorithm-for-consolidating-gold-mines – Thilo