• Kruskal算法正确性证明


    Kruskal算法:

      步骤1,选择边e1,使得权值w(e1)尽可能小;

      步骤2,若已选定边e1,e2,...,ei,则从E{e1,e2,...,ei}选取e(i+1),使得

        (1)G[{e1,e2,...,e(i+1)}]为无圈图

        (2)权值w(e(i+1))是满足(1)的尽可能小的权;

      步骤3,当步骤2不能继续执行时停止。

    证明:由Kruskal算法构成的任何生成树T*=G[{e1,e2,...,e(n-1)}]都是最下生成树,这里n为赋权图G的顶点数。(个人理解:因为局部最优,取尽可能小的权,不代表全局最小,因此正确性还是要证明的吧)

    使用反证法,1、有kruskal算法构成的生成树T*和异于T*的生成树T,这两种生成树。

          2、定义函数f(T)表示不在T中的最小权值i的边ei。假设T*不是最小树,T真正的最小树,显然T会使f(T)尽可能大的,即T本身权重则会尽可能小,。

          3、设f(T)=k,表示存在一个不在T中的最小权值边ek=k,也就是说e1,e2,...e(k-1)同时在T和T*中,ek=k不在T中

          4、T+ek包含唯一圈C。设ek ' 是C的一条边,他在T中而不在T*中。(想象圈C中至少有ek 和ek ' ,其中ek是又Kruskal算法得出的最小权边) 

          5、令T ' =W(T)+w(ei)-w(ei ' ),kruskal算法选出的是最小权边ek,(而ek'是T自己根据f(T)选出来的边)有w(ek ' )>=w(ek) 且W(T ' )=W(T*)(T ' 也是一个最小生成树)

          6、但是f(T ' )>k= f(T),即T没有做到使得f(T)尽可能大,不再是真正的最小树,所以T=T*,从而T*确实是一棵最小数。

  • 相关阅读:
    sort_action
    jedis
    ClassNotFoundException
    mysql-test-run.pl
    mysql 5.6 bug
    The basic principle of test case 修改引擎
    mysql 执行计划走索引
    mysql 执行计划走索引
    14.1.2 Checking InnoDB Availability 检查InnoDB 可用性:
    14.1.2 Checking InnoDB Availability 检查InnoDB 可用性:
  • 原文地址:https://www.cnblogs.com/SsoZhNO-1/p/9938842.html
Copyright © 2020-2023  润新知