最小生成树的Prim算法

思想:采用子树延伸法

将顶点分成两类:

生长点——已经在生成树上的顶点

非生长点——未长到生成树上的顶点

使用待选边表:

每个非生长点在待选边表中有一条待选边,一端连着非生长点,另一端连着生长点

步骤:

步骤1)构造初始待选边表,任选一个顶点v作为初始生长点,对其余每个非生长点w(共n-1个),将边(w,v)加进待选边表,如果边(w,v)不存在,则认为边(w,v)的长度是∞。

步骤2)循环n-2遍,非生长点个数k从n-1变到1。

①选择树边。

从待选边表中选出一条最短的待选边(u,v),这里u是非生长点,v是生长点,将(u,v)从待选边表移入生成树的边集,并且将u作为新选出的生长点。

②修改待选边

对剩下的每个非生长点w,比较待选边是(w,x)与边(w,u)的长度,这里x是原有的生长点,u是新选出的生长点,如果(w,u)短于边(w,x),则用(w,u)代替(w,x),作为w的待选边;否则,什么也不做。

示例:

以上为官方图例,如果看不懂可以看下面的世俗图解。。。。。。。。。。。。。。。。

B为生长点,列出所有与B连接点权值。

B

B

B

B

B

C

A

D

E

F

14

4

20

5

1.再以权值最小的为生长点,发现B-A的权值最小。A为新的生长点。

及B-A的边确定了。

2.A的为生长点与B原来的边进行比较,若小于原来,就交换。

A-C  8 小于  B-C  交换

A-D  45 小于 B-D  交换

A-E    大于 B-E  不交换

A-F  3  小于  B-F  交换

B

A

A

B

A

A

C

D

E

F

4

8

45

20

3

在以权值最小为生长点。F为新的生长点。

同理,F分别于A原来的权值,进行比较(如上步骤)

B

A

A

A

F

A

F

C

D

E

4

3

8

45

13

在以权值最小为生长点。C为新的生长点。

B

A

A

C

C

A

F

C

D

E

4

3

8

28

9

在以权值最小为生长点。E为新的生长点。

B

A

A

C

E

A

F

C

E

D

4

3

8

9

10

结束。按结点和权值依次画出最小生成树。

注意点:

1.要找准新的生长点(权值最小那个)。

2.找准新生长点后,要以新的生长点与各节点的权值,和原来生长点与各节点点权值,进行足一比较,小于原来的就交换。否则,保持原来的结点和权值。

实现方法分析:

(1)图的边集存储形式

采用邻接数组存储,便于比较边长度,只需存储邻接矩阵的下三角部分(无向加权图)。

(2)待选边表和树边集的存储形式

如上例,待选边表和树边集共用一个长度为n-1的数组存储,元素含3个域:生长点和非生长点名称,边长度。

(3)处理步骤(循环n-2遍)

如上例,每次从当前待选边中选出最短边作树边,换到数组左段的右端,修改剩下的待选边。

Prim算法与Kruskal算法对照:

1)主要思想——都是选短边,但选法不同

Kruskal算法从全图中选短边。

Prim算法从待选边表中选短边。

2)直观性

Kruskal采用子树合并法(直观)

Prim算采用子树延伸法

3)实现的难易程度

Kruskal算法需要判断回路(实现困难些)

Prim算法不需要判断回路

4)时间复杂性

Kruskal算法执行时间主要花费在判断回路,所需时间不超过O(mlogm),m是边数

Prim算法执行时间主要花费在n-2次修改待选边表,其时间耗费用量是O(n2)阶的,n是顶点数

Kruskal算法适用于顶点数较多,而边数较少的情况

Prim算法适用于顶点数较少,而边数较多的情况

24最小生成树之Prim算法的更多相关文章

  1. C++编程练习(10)----“图的最小生成树“(Prim算法、Kruskal算法)

    1.Prim 算法 以某顶点为起点,逐步找各顶点上最小权值的边来构建最小生成树. 2.Kruskal 算法 直接寻找最小权值的边来构建最小生成树. 比较: Kruskal 算法主要是针对边来展开,边数 ...

  2. 最小生成树一·Prim算法

    描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可以拥有不止一个城市了! 但是,问题也接踵而来——小Hi现在手上拥有N座城市,且已知这N座城市中任意两座城市之间建造道 ...

  3. 数据结构与算法--最小生成树之Prim算法

    数据结构与算法--最小生成树之Prim算法 加权图是一种为每条边关联一个权值或称为成本的图模型.所谓生成树,是某图的一棵含有全部n个顶点的无环连通子图,它有n - 1条边.最小生成树(MST)是加权图 ...

  4. 最小生成树的Prim算法

       构造最小生成树的Prim算法    假设G=(V,E)为一连通网,其中V为网中所有顶点的集合,E为网中所有带权边的集合.设置两个新的集合U和T,其中集合U用于存放G的最小生成树的顶点,集合T用于 ...

  5. hihocoder 1097 最小生成树一·Prim算法

    #1097 : 最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可 ...

  6. 算法学习记录-图——最小生成树之prim算法

    一个连通图的生成树是一个极小的连通子图,它包含图中全部的顶点(n个顶点),但只有n-1条边. 最小生成树:构造连通网的最小代价(最小权值)生成树. prim算法在严蔚敏树上有解释,但是都是数学语言,很 ...

  7. Hihocoder 之 #1097 : 最小生成树一·Prim算法 (用vector二维 模拟邻接表,进行prim()生成树算法, *【模板】)

    #1097 : 最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可 ...

  8. hihocoder hiho一下 第二十六周 最小生成树一·(Prim算法)

    题目1 : 最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可以拥 ...

  9. 无向图最小生成树(prim算法)

    普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点,且其所有边的权值之和亦为最小.该算法于1930年由捷 ...

随机推荐

  1. 一个不错的工具推荐:JMeter

    在开发中可能会遇到一些场景需要对程序的性能,并发能力等进行度量,就是对一些程序的性能进行度量,生成一些报告等,最近遇到了一个不错的工具 apache JMeter,它是用java的swing开发的,功 ...

  2. DXP 内电层分割

    多层电路板中间层设置与内电层如何分割 多层电路板与一般的电路板不同之处在于,多层电路板除了顶层和底层之外,还有若干中间层,这些中间层可以是信号层(mid layer),也可以是内部电源/接地层(int ...

  3. kvm/qemu虚拟机桥接网络创建与配置

    首先阐述一下kvm与qemu的关系,kvm是修改过的qemu,而且使用了硬件支持的仿真,仿真速度比QEMU快. 配置kvm/qemu的网络有两种方法.其一,默认方式为用户模式网络(Usermode N ...

  4. 在jmeter测试中模拟不同的带宽环境

    怎么去测试在手机app中和在web的不同的连接速度对服务器的影响呢? 大部分情况下,手机终端用户通过移动网络访问网站.所以在不同的网络连接数据下,我们的网站或程序可以同时处理多少链接?今天,这篇文件就 ...

  5. smarty模板的配置

    smarty下载: http://www.smarty.net/download   建议使用一个兼容性好的smary版本. 太新的版本往往对php的版本支持不好.   php推荐使用的模板是:sma ...

  6. 爬取博主的所有文章并保存为PDF文件

    继续改进上一个项目,上次我们爬取了所有文章,但是保存为TXT文件,查看不方便,而且还无法保存文章中的代码和图片. 所以这次保存为PDF文件,方便查看. 需要的工具: 1.wkhtmltopdf安装包, ...

  7. cas 单点登录 --自定义审计日记@Audit()

    错误信息: org.springframework.webflow.execution.ActionExecutionException: Exception thrown executing [An ...

  8. python中的range与xrange

    range 也是一种类型(type),它是一个数字的序列(s sequence of numbers),而且是不可变的,通常用在for循环中. class range(stop) class rang ...

  9. 7.20 python线程3

    2018-7-20 18:46:49 去俺弟家玩去 后天回来 1.复习 # !/usr/bin/env python # !--*--coding:utf-8 --*-- # !@Time :2018 ...

  10. CentOS7.5搭建Solr7.4.0单机服务

    一.Solr安装环境 1.官方参考文档 Solr教程参考指南:http://lucene.apache.org/solr/guide/7_4/solr-tutorial.html 2.Solr运行环境 ...