我試圖找出問題是什麼與實施我的算法,以合併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