具有双重权重参数的最小生成树


12

考虑图。每个边缘具有两个权重和。查找最小化乘积。该算法应相对于在多项式时间内运行 。ê é é Σ ê Ť ëΣ Ë Ť ë | V | | E |G(V,E)eAeBe(eTAe)(eTBe)|V|,|E|

我发现很难在生成树上适应任何传统算法(Kruskal,Prim,Edge-Deletion)。怎么解决呢?有什么提示吗?


也许尝试构造一个新的图,其中边的权重为。emax(Ae,Be)
utdiscant 2012年

3
这是家庭作业问题/练习吗?如果是这样,那是一本教科书吗?我问的原因是上下文可以帮助“逆向工程”问题。贪婪算法在这里并不是很合适,但是如果它来自贪婪算法这一章……
Joe

1
@utdiscant,那行不通。负边缘可能有用。
Nicholas Mancuso 2012年

即使对于上升沿也没有用,例如,在大多数情况下,对(10,10)并不比对(11,1)好。

Answers:


1

我将假定您没有获得负加权边缘,因为如果存在负权重,这可能无法正常工作。

算法

对于每个边缘,将它们标记为到1n

令权重边号aii

令权重边号 Bbii

草拟这张桌子

   |a_1 a_2 a_3 a_4 .. a_n
---+-------------------------
b_1|.........................
b_2|.........................
 . |.........................
 . |.........................
b_n|...................a_n * b_n

每个表元素都是行和列的乘积。

对于每条边,将相关的表行和列相加(并记住相交中的元素,因为该元素已被相加两次)。

找到总和最大的边,如果不断开图形,则删除该边。标记边缘为必不可少的。如果已删除边,请在其行和列中填充0。

正确性

结果显然是一棵树。

由于没有顶点断开,因此结果显然是跨度的。

结果是最小的?如果存在另一个边缘,该边缘的删除将在算法结束时创建一个较小的生成树,则该边缘将被删除并首先为空。(如果有人可以帮助我使这个变得更加严格/和/或反例,那就太好了)

运行

多项式 。|V|

编辑

(2,11),(11,2),(4,6)反例。

a1=2,a2=11,a3=4

b1=11,b2=2,b3=6

然后

   | 2     11     4
---+--------------------
11 | 22    121    44
 2 | 4     22     8
 6 | 12    66     24

(4,6)=44+8+24+66+12=154(2,11)=22+4+12+121+44=203(11,2)=121+22+66+4+8=221

(11,2)被删除。

最终得到(2,11),(4,6)=617=102

其他的生成树是

(11,2),(4,6)=1512=180

(2,11),(11,2)=1313=169


1
在我看来,这是一个相当贪婪的做法。您的极简主义“证明”令我信服。
Nejc 2012年

1
@SaeedAmiri这是一个反例吗?我将工作发布在已编辑的部分中,该算法给出了正确的结果。
赫普·德灵顿

1
您所做的是查找每个对贡献,然后选择影响最大的那些。很好,但这不是必需的。这是一个棘手的问题。如果您想改善答案,则需要提供证明。否则,没有任何用处。(ai,bi)eEai.eEbi
2012年

但是,为您的努力而投下反对票是非常不公平的。
2012年

@AJed证明与prim / kush / reverse删除中的证明相同。我们现在需要证明的是,割下的财产仍然成立。
赫普·德灵顿

1

这是来自http://www.cnblogs.com/autsky-jadek/p/3959446.html的解决方案。

我们可以将每个生成树视为平面中的一个点,其中是权重之和,y是权重之和。目的是使最小化。xyxeTAeeTBexy

  1. 根据权重和权重找到最小生成树。因此,我们在xy平面有两个点。在平面上的所有生成树点中,具有最小,具有最小。ABA,BAxBy

  2. 现在我们的目标是在三角形中找到到线最大距离的点,这样我们就可以使三角形所有点的的值最小。COABABxyCABC

因为。2SABC=|AB×AC|=(BxAx,ByAy)×(CxAx,CyAy)=(BxAx)Cy+(AyBy)CxAy(BxAx)+Ax(ByAy)

  1. 请注意,是一个常数,因此我们现在的目标是最大化。因此,我们制作了新图,而权重。现在我们在上运行最大生成树得到点。Ay(BxAx)+Ax(ByAy(BxAx)Cy+(AyBy)CxG=(V,E)w(e)=Be(BxAx)+Cx(AyBy)GC

  2. 递归在上运行上述算法,直到和之间不再有生成树。B C A C OOBC,OACBC,ACO

  3. 现在我们得到了一组可能的生成树。计算每棵树的值以获得最小的树。xy

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.