六边形图中寻找最优节点对的算法

时间:2011-06-23 09:15:39

标签: algorithm graph complexity-theory mathematical-optimization graph-algorithm

我正在寻找一种算法,以在六边形(蜂窝)图上找到相邻节点对,从而最大限度地降低成本函数。

  • 每个节点连接到三个相邻节点
  • 每个节点“i”应与正好一个邻居节点“j”配对。
  • 每对节点定义一个成本函数

    c = pairCost(i,j)

  • 然后将总费用计算为

    totalCost = 1/2 sum_ {i = 1:N}(pairCost(i,pair(i)))

其中pair(i)返回“i”与之配对的节点的索引。 (总和除以2,因为总和计算每个节点两次)。我的问题是,如何找到最小化totalCost的节点对?

链接的图像应该使解决方案看起来更清晰(粗红线表示配对):

enter image description here

进一步说明:

  • 我真的不关心最外面的节点
  • 我的成本函数类似于|| v (i) - v (j)|| (与节点关联的向量之间的距离)
  • 我猜这个问题可能是NP难的,但我真的不需要真正的最佳解决方案,一个好的解决方案就足够了。
  • Naive algos倾向于获得“锁定”的节点,即所有邻居都被占用。

注意:我不熟悉这个领域的常用命名法(图论是什么?)。如果你可以提供帮助,那么也许这可以让我在文献中寻找解决方案。

2 个答案:

答案 0 :(得分:1)

这是一般图表中maximum weight matching problem的一个实例 - 当然,您必须否定权重才能使其成为最小权重匹配问题。 Edmonds的paths, trees and flowers algorithmWikipedia 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完全的。)