我正在寻找一种算法,以在六边形(蜂窝)图上找到相邻节点对,从而最大限度地降低成本函数。
每对节点定义一个成本函数
c = pairCost(i,j)
然后将总费用计算为
totalCost = 1/2 sum_ {i = 1:N}(pairCost(i,pair(i)))
其中pair(i)返回“i”与之配对的节点的索引。 (总和除以2,因为总和计算每个节点两次)。我的问题是,如何找到最小化totalCost的节点对?
链接的图像应该使解决方案看起来更清晰(粗红线表示配对):
进一步说明:
注意:我不熟悉这个领域的常用命名法(图论是什么?)。如果你可以提供帮助,那么也许这可以让我在文献中寻找解决方案。
答案 0 :(得分:1)
这是一般图表中maximum weight matching problem的一个实例 - 当然,您必须否定权重才能使其成为最小权重匹配问题。 Edmonds的paths, trees and flowers algorithm(Wikipedia link)为您解决了这个问题(还有一个公共Python implementation)。对于 n 顶点,天真的实现是O(n 4 ),但它可以被推到O(n 1/2 m)使用Micali和Vazirani的算法 n 顶点和 m 边缘(抱歉,找不到PDF)。
答案 1 :(得分:0)
这似乎与minimum edge cover problem有关,附加约束条件是每个节点只能有一条边,并且您试图最小化成本而不是边数。也许你可以通过搜索那个短语来找到答案。
如果失败了,你的问题可以被表述为integer linear programming problem,这是NP完全的,这意味着你甚至可能因为中等问题而获得可怕的性能。 (但这并不一定意味着问题本身就是NP完全的。)