知识大全 图 - 生成树和最小生成树 - 最小生成树(二)

Posted

篇首语:炒沙作縻终不饱,缕冰文章费工巧。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 图 - 生成树和最小生成树 - 最小生成树(二)相关的知识,希望对你有一定的参考价值。

   普里姆(Prim)算法

  ( )算法思想

  T=(U TE)是存放MST的集合

  ①T的初值是(r ¢)

  即最小生成树初始时只有一个红点r 没有红边

  ②T经过n 次如下步骤操作 最后得到一棵含n个顶点 n 条边的最小生成树

  ⒈选择紫边集中一条轻边并扩充进T

  ⒉将轻边连接的蓝点改红点

  ⒊将轻边改红边

  ⒋修改紫边集

  ( )较小紫边集的构造

  若当前形成的T中有k个顶点 |U|=k |V u|=n k 故可能的紫边数目是k(n k) 从如此大的紫边集中选择轻边是低效的 因此

   必须构造较小的紫边集

  对于每个蓝点v ∈V U 从v到各红点的紫边中 只有最短的那一条才有可能是轻边 因此 只须保留所有n k个蓝点所关联的最

  短紫边作为轻边的候选集即可

  ( )候选紫边集合的修改

  当把轻边(u v)扩充到T时 因为v由蓝变红 故对每个剩余的蓝点j 边(v j)就由非紫边变为紫边 这条新紫边的长度可能小

  于蓝点j原来所关联的最短紫边的长度 因此 用长度更小的新紫边取代那些原有的最短紫边

  ( )Prim算法的伪代码描述

  PrimMST(G T r)

  //求图G的以r为根的MST 结果放在T=(U TE)中

  InitCandidateSet(…);//初始化 设置初始的轻边候选集 并置T=(r ¢)

  for(k= ;k

  (u,v)=SelectLiShtEdge(…);//选取轻边(u,v);

  T←T∪(u,v);//扩充T,即(u,v)涂红加入TE,蓝点v并人红点集U

  ModifyCandidateSet(…); //根据新红点v调整候选轻边集

  

  

  (5) 算法的执行过程

  用PRIM算法得到最小生成树的过程【 参见动画演示 】

  

>

  注意:

  若候选轻边集中的轻边不止一条,可任选其中的一条扩充到T中。tW.WingWit.

  连通网的最小生成树不一定是惟一的,但它们的权相等。

  【例】在上图(e)中,若选取的轻边是(2,4)而不是(2,1)时,则得到如图(h)所示的另一棵MST。

  (6)算法特点

  该算法的特点是当前形成的集合T始终是一棵树。将T中U和TE分别看作红点和红边集,V-U看作蓝点集。算法的每一步均是在连接

  红、蓝点集的紫边中选择一条轻边扩充进T中。MST性质保证了此边是安全的。T从任意的根r开始,并逐渐生长直至U=V,即T包含了

  C中所有的顶点为止。MST性质确保此时的T是G的一棵MST。因为每次添加的边是使树中的权尽可能小,因此这是一种"贪心"的策略。

  (7)算法分析

  该算法的时间复杂度为O(n 2 )。与图中边数无关,该算法适合于稠密图。

cha138/Article/program/sjjg/201311/23827

相关参考

知识大全 图 - 生成树和最小生成树 - 最小生成树(三)

  克鲁斯卡尔(Kruskal)算法  ()算法思想  ①T的初始状态  只有n个顶点而无边的森林T=(V¢)  ②按边长递增的顺序选择E中的n安全边(uv)并加入T生成MST  注意  安全边指两个

知识大全 图 - 生成树和最小生成树 - 生成树

  树(自由树)无序树和有根树  自由树就是一个无回路的连通图(没有确定根)(在自由树中选定一顶点做根则成为一棵通常的树)  从根开始为每个顶点(在树中通常称作结点)的孩子规定从左到右的次序则它就成为

知识大全 数据结构之最小生成树

最小生成树的概念和应用背景  最小生成树(MinimumSpanningTree)各边权的总和最小的生成树  MST性质  假设N=(VE)是一个连通网U是顶点集V的一个非空子集若(UV)是一条具有最

知识大全 贪婪算法之——最小耗费生成树

  在例及中已考察过这个问题因为具有n个顶点的无向网络G的每个生成树刚好具有n条边所以问题是用某种方法选择n条边使它们形成G的最小生成树至少可以采用三种不同的贪婪策略来选择这n条边这三种求解最小生成树

知识大全 数据结构考研分类复习真题 第七章 图[38]

  .一带权无向图的邻接矩阵如下图试画出它的一棵最小生成树【浙江大学五 (分)】  .请看下边的无向加权图  ().写出它的邻接矩阵(分)  ().按Prim算法求其最小生成树并给出构造最小

知识大全 数据结构考研分类复习真题 第七章 图[35]

  .考虑右图  ()从顶点A出发求它的深度优先生成树  ()从顶点E出发求它的广度优先生成树  ()根据普利姆(Prim)算法  求它的最小生成树【上海交通大学六(分)】  在什么情况下Prim算法

知识大全 数据结构考研分类复习真题 第七章 图[13]

  最小生成树的KRUSKAL算法是一种贪心法(GREEDY)(   )【华南理工大学一(分)】  求最小生成树的普里姆(Prim)算法中边上的权可正可负( &

知识大全 数据结构考研分类复习真题 第七章 图[19]

  Prim(普里姆)算法适用于求______的网的最小生成树kruskal(克鲁斯卡尔)算法适用于求______的网的最小生成树【厦门大学一】  .克鲁斯卡尔算法的时间复杂度为______它对___

知识大全 数据结构之生成树

    生成树(SpanningTree)从连通图的任何一个顶点出发进行遍历遍历过程中经过的边加上图的所有顶点构成的子图称为图的生成树  深度优先生成树由深度优

知识大全 数据结构考研分类复习真题 第七章 图[37]

  .试写出用克鲁斯卡尔(Kruskal)算法构造下图的一棵最小支撑(或生成)树的过程【吉林大学一 (分)】  求出下图的最小生成树【合肥工业大学四(分)】 cha138