具有共享边界的最小连接区域的图论算法

Posted

技术标签:

【中文标题】具有共享边界的最小连接区域的图论算法【英文标题】:Graphy Theory Algorithm for minimally connecting areas with shared boundaries 【发布时间】:2012-02-23 15:21:17 【问题描述】:

我有多个“动物笔”的加权图,每支笔至少有 3 个边/点和至少两支笔。为了连接所有笔,我必须找出要移除的最小加权边缘(您可以通过移除未连接到其他笔的外边缘来连接它们)。

有人可以推荐一种算法或过程,我可以通过它找到要移除的最小加权墙。我在考虑 Prim 的算法,但我什至不完全确定如何应用它。

这是http://cemc.math.uwaterloo.ca/contests/computing/2010/stage1/seniorEn.pdf上的问题S4

我不希望答案只是关于如何处理它的一些方向

【问题讨论】:

最好在programmers.stackexchange.com上询问,这可能会导致意见而不是事实答案。 【参考方案1】:

你的方向是对的。

将您的问题建模为无向图G=(V,E) 其中V = all pens E = (u,v) | there is a wall between u and v w((u,v)) = cost of wall between u and v

为了“连接所有笔” - 你实际上正在寻找一个子图:G'=(V,E') 这样子图G' 将被连接[每两个节点之间有一条路径],以及墙壁的成本在 E' 中是最小的。

要以最低成本获得此功能 - 您正在寻找 Minimum Spanning Tree。 [很容易看出你确实需要一棵树——因为创建树后任何额外的边都是多余的,可以在不损害图形连接性的情况下删除——或者在问题术语中——你可以恢复一堵墙,笔会保持联系]

Prim 和 Kruskal 是两种可能的算法,可以让你获得 MST

【讨论】:

你不需要两次应用算法,有和没有外部“笔”吗?或者有没有更好的方法来合并跨外笔是可选的? @xan:我相信你是对的,[尽管可能有解决办法]。在第二次运行中,您只需为“外部”添加一个额外的顶点即可。无论如何,它不会影响时间复杂度的大 O 表示法的解决方案。

以上是关于具有共享边界的最小连接区域的图论算法的主要内容,如果未能解决你的问题,请参考以下文章

从存图到最短路算法的图论总结

算法关于图论中的最小生成树(Minimum Spanning Tree)详解

怎么求最小生成树 (离散数学 图论)

图论最小生成树Prim和Kruskal算法

备战数学建模47-数模常规算法之图论(攻坚站12)

备战数学建模47-数模常规算法之图论(攻坚站12)