我正在尋找一種算法來尋找使成本函數最小化的六邊形(蜂窩)圖上的相鄰節點對。在六角形圖中尋找最佳節點對的算法
- 每個節點被連接到三個相鄰節點
- 每個節點「i」的應用正好一個鄰居節點「J」配對。
每對節點的定義的成本函數
C = pairCost(I,J)
的總成本被計算爲
TOTALCOST = 1/2 {sum_ I = 1 :對}成對(i,對(i)))
其中對(i)返回與「i」配對的節點的索引。 (總和除以2,因爲總和計數每個節點兩次)。我的問題是,如何找到最小化totalCost的節點對?
鏈接的圖片應該可以很清楚的一個解決方案是什麼樣子(粗紅線表示一種配對):
一些進一步的說明:
- 我不真的關心最外層的節點
- 我的成本函數是像|| (i)v(j)|| (與節點相關的向量之間的距離)
- 我猜這個問題可能是NP難題,但我並不真的需要真正的最佳解決方案,一個好的解決方案就足夠了。
- 樸素算術傾向於獲得「鎖定」的節點,即所有鄰居都被佔用。
注:我不熟悉這個領域的通常術語(是圖論?)。如果你能幫上忙,那麼也許可以讓我在文獻中尋找解決方案。
謝謝,Edmonds的Blossom算法解決了這個問題。不幸的是,它的複雜性比節點的數量要多(對我來說)。由於我正在考慮非常大的圖表,我需要找到更快的算法。有可能利用我圖的統一結構 - 如果不是的話,似乎有很多啓發式的快速近似解法。 – svantana
嘗試找到Micali和Vazirani算法的實現;由於你的圖是六邊形的,所以* m *漸近地等於* 3n *,這使得它的複雜性變爲O(n 3/2)。 –