use*_*615 8 c++ algorithm
我有一个家庭作业问题,我不知道如何解决它.如果你能给我一个想法,我将非常感激.
这就是问题:"给定一个连通的无向图,它有N个顶点和N个边.每个顶点都有成本.你必须找到一个顶点子集,这样子集中顶点的总成本才是最小的,每个边缘都与子集中的至少一个顶点一起入射."
先感谢您!
PS:我已经解决了很长一段时间的解决方案,我想出的唯一想法是回溯或二分图中的最低成本匹配,但这两个想法对于N = 100000都太慢了.
Sky*_*ler 1
由于边的数量严格要求顶点数量相同,因此它不是常见的顶点覆盖问题,而是NP完全问题。我认为这里有一个多项式解:
N 个顶点和 (N-1) 条边的图是一棵树。你的图有 N 个顶点和 N 个边。首先找到导致循环的糟糕边缘并将图变成树。您可以使用 DFS 来查找循环 ( O(N))。删除循环中的任何一条边都可以生成一棵树。在极端条件下,你会得到 N 可能的树(原始图是一个圆圈)。
O(N)
O(N)对每个可能的树 ( )应用简单的动态规划算法 ( O(N^2)),然后找到成本最小的一棵。
O(N^2)
归档时间:
12 年,8 月 前
查看次数:
248 次
最近记录: