【问题标题】:The Edge Set Grown in Kruskal's Algorithm [closed]Kruskal 算法中的边缘集[关闭]
【发布时间】:2013-02-24 18:01:26
【问题描述】:

令 G = (V, E) 是一个加权的、连通的和无向图。令 T 为在 Kruskal 算法中增长并在 k 次迭代后停止的边集(因此 T 可能包含少于 |E|-1 条边)。令 W(T) 为该集合的加权和。 令 T' 是一个无环边集,使得 |T| = |T'|。证明 W(T)

我了解算法的原始证明,并且我尝试了几种方法来解决这个问题,但都没有奏效。

例如:我想对 |T| 进行归纳。可能会奏效。 对于 |T| = 1 很明显。

我们假设|T|=k 的正确性,并证明(或不……)k+1。通过矛盾假设存在一个边集 T' 使得 |T'|=k+1 并且 W(T')

设 e 为 Kruskal 算法添加的最后一条边。所以对于 T' 中的任何边 f,W(f)

只有当 T' 中的每条边都已经在 T 中或与 T - {e} 形成一个循环时才会发生这种情况。

注意:这与 Kruskal 算法中的证明不同。我们甚至不知道 T' 是否连通。

我不知道下一步该做什么。我真的很感激任何帮助, 提前致谢

【问题讨论】:

    标签: algorithm graph-algorithm minimum-spanning-tree kruskals-algorithm


    【解决方案1】:

    T’ 是一个边集,使得|T| = |T’|。证明W(T) <= W(T’)

    你会很难做到这一点,因为它通常是错误的。

    考虑

       1
     A---B
    2 \ / 3
       C
       | 4
       D
    

    Kruskal 算法生成边集T = { (A,B), (A,C), (C,D) },这是唯一的最小生成树。

    但边集T' = { (A,B), (A,C), (B,C) }T 具有相同的基数,并且

    W(T') = 6 < W(T) = 7
    

    问题陈述中缺少一些条件(例如 T' 应该连接图表)。


    你是对的。忘了说T'没有循环了

    在这种情况下,T' 跨越一棵树(1)。并且由于假设|T'| = |T|,所以T'跨越的树连接图,即是一棵生成树。

    (1) 由于没有循环,直接得出T' 的每个连通分量都是一棵树。具有n 顶点的树具有n-1 边。因此如果T'k 连通分量,则图中的顶点数为

    V = |T'| + k
    

    T 是一棵生成树,而|T| = |T'|,因此

    V = |T| + 1 = |T'| + 1
    

    这意味着k = 1

    因此要求您简单地证明 Kruskal 算法的正确性。你可以很容易地在文献中找到证明,例如on wikipedia

    正确性证明(通过对顶点数的归纳):

    引理:设G 是具有N &gt; 1 顶点的连通图,而TG 的最小生成树。让e 成为T 中的一个边。 然后T \ {e} 通过识别e 的两个端点ab 投影到从G 获得的图G' 的最小生成树。相反,如果T'G 的一组边投影到G' 的最小生成树,则T' ∪ {e}G 的最小生成树。

    证明:设p : G -&gt; G' 是标识ab 的投影。

    那么p(T \ {e}) 没有循环。

    假设p(T \ {e}) 包含一个循环C。那么p^(-1)(C) 必须是连接ab 的路径。但随后T 将包含循环p^(-1)(C) ∪ {e},这与T 是一棵树的前提相矛盾。

    因此p(T \ {e})G' 与基数N - 2 的无循环边集,这意味着(见上文)它是一棵生成树。

    T'' 成为G'S = p^(-1)(T'') 的最小生成树。

    那么S ∪ {e} 没有循环。

    如果S 中存在循环,则将投影到T'' 中的循环,因此S ∪ {e} 中的每个循环都必须包含e。假设CS ∪ {e} 中的一个循环。那么C \ {e} 是连接ab 的路径,因此C \ {e} 投影到G' 中的一个循环,因为ab 投影到G' 的同一顶点。这与T'' 是一棵树的前提相矛盾。

    所以S ∪ {e} 是基数N - 1 的边集,没有循环,因此(见上文)G 的生成树。

    那么W(T) &lt;= W(S ∪ {e}) 因为T 是最小生成树,因此

    W(p(T \ {e})) = W(T \ {e}) <= W(S) = W(T'')
    

    由于T'' 被假定为G' 的最小生成树,因此等式成立,p(T \ {e})G' 的最小生成树,S ∪ {e} 是最小生成树G 的树。

    现在进行归纳以证明 Kruskal 算法的正确性:

    对于一个至多有两个顶点的图,很明显该算法会产生一个最小生成树。

    对于n &gt;= 2,假设算法对所有最多具有n 顶点的连接图的正确性。 (归纳假设)

    G 是一个有n+1 顶点的连通图。让e 成为算法中选择的第一条边,ab 是它的端点。

    G' 是通过识别abp :: G -&gt; G' 投影从G 获得的图形。

    T为算法选择的边集。

    那么p(T \ {e})是Kruskal算法在G'上选择的边集。因此,根据上面的引理,TG 的最小生成树。

    (好吧,维基百科中的证明可能更简单,但我想制作一个不同的证明。)

    【讨论】:

    • 谢谢!你是对的。我忘了说T'中没有循环
    • 已更新。这里有什么可以证明正确性的地方吗?
    • 是的,我仍然不知道如何证明......
    • 请注意我们不知道T'是否连通
    • 不清楚的地方见谅
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多