销毁双向图中的加权边

时间:2012-11-06 16:50:19

标签: algorithm graph-theory dynamic-programming

在我最近的采访中,我被问到以下问题: 有一个没有周期的双向图G.每个边缘都有一些重量。还有一组节点K应该彼此断开(通过去除一些边缘)。 K集中任意两个节点之间只有一条路径。目标是最小化移除的边缘的总重量并断开所有节点(从集合K)彼此断开连接。

我的方法是从K set为每个节点运行BFS,并确定K之间所有节点对之间的所有路径。那么我将有一组路径(每个路径是一组边)。 我的下一步是应用动态编程方法来找到移除边缘的最小总重量。在这里我卡住了。你能帮助我(只是指导我)如何完成DP。

感谢。

2 个答案:

答案 0 :(得分:2)

这听起来像树中的Multiway Cut问题,假设“双向”图​​形就像一个无向图形。它可以通过简单的动态编程在多项式时间内求解。见Chopra和Rao:“On the multiway cut polyhedron”,Networks 21(1):51-89,1991。另见this question

答案 1 :(得分:1)

使用不相交集可以解决此问题。在这个问题中,你需要像森林一样制作每个顶点的集合。然后,通过图中的边连接属于两个不同集的顶点,使得 -

1)如果其中一个集合包含k个节点集中提到的节点,则节点成为代表元素。

2)如果两个集合都包含不需要的节点(节点中存在节点),则在两个集合中找到最小权重边缘并进行比较,然后将它们中的最小值与边缘进行比较加入并找到最低限度。然后删除我们找到的边缘,以便不存在任何路径。

3)如果集合中没有一个包含不需要的节点,则将一个集合加入另一个集合。

通过这种方式,您可以在O(nlogn)的非常好的时间复杂度中找到被破坏边缘的最小总重量。 您的方法也会起作用,但就时间复杂性而言,它会被证明是昂贵的。

这是完整的代码 - (GameAlgorithm.cpp) https://github.com/KARTHEEKCIC/RoboAttack