考虑图。每个边缘具有两个权重和。查找最小化乘积。该算法应相对于在多项式时间内运行 。ê 甲é 乙é (Σ ê ∈ Ť 甲ë)(Σ Ë ∈ Ť 乙ë) | V | ,| E |
我发现很难在生成树上适应任何传统算法(Kruskal,Prim,Edge-Deletion)。怎么解决呢?有什么提示吗?
考虑图。每个边缘具有两个权重和。查找最小化乘积。该算法应相对于在多项式时间内运行 。ê 甲é 乙é (Σ ê ∈ Ť 甲ë)(Σ Ë ∈ Ť 乙ë) | V | ,| E |
我发现很难在生成树上适应任何传统算法(Kruskal,Prim,Edge-Deletion)。怎么解决呢?有什么提示吗?
Answers:
我将假定您没有获得负加权边缘,因为如果存在负权重,这可能无法正常工作。
对于每个边缘,将它们标记为到
令权重边号
令权重边号 B
草拟这张桌子
|a_1 a_2 a_3 a_4 .. a_n
---+-------------------------
b_1|.........................
b_2|.........................
. |.........................
. |.........................
b_n|...................a_n * b_n
每个表元素都是行和列的乘积。
对于每条边,将相关的表行和列相加(并记住相交中的元素,因为该元素已被相加两次)。
找到总和最大的边,如果不断开图形,则删除该边。标记边缘为必不可少的。如果已删除边,请在其行和列中填充0。
结果显然是一棵树。
由于没有顶点断开,因此结果显然是跨度的。
结果是最小的?如果存在另一个边缘,该边缘的删除将在算法结束时创建一个较小的生成树,则该边缘将被删除并首先为空。(如果有人可以帮助我使这个变得更加严格/和/或反例,那就太好了)
多项式 。
是不反例。
然后
| 2 11 4
---+--------------------
11 | 22 121 44
2 | 4 22 8
6 | 12 66 24
被删除。
最终得到
其他的生成树是
这是来自http://www.cnblogs.com/autsky-jadek/p/3959446.html的解决方案。
我们可以将每个生成树视为平面中的一个点,其中是权重之和,y是权重之和。目的是使最小化。
根据权重和权重找到最小生成树。因此,我们在xy平面有两个点。在平面上的所有生成树点中,具有最小,具有最小。
现在我们的目标是在三角形中找到到线最大距离的点,这样我们就可以使三角形所有点的的值最小。
因为。
请注意,是一个常数,因此我们现在的目标是最大化。因此,我们制作了新图,而权重。现在我们在上运行最大生成树得到点。
递归在上运行上述算法,直到和之间不再有生成树。B C ,A C O
现在我们得到了一组可能的生成树。计算每棵树的值以获得最小的树。