普利姆算法理解(最小生成树)

普里姆算法在找最小生成树时,将顶点分为两类,一类是在查找的过程中已经包含在树中的(假设为 A 类),剩下的是另一类(假设为 B 类)。

对于给定的连通网,起始状态全部顶点都归为 B 类。在找最小生成树时,选定任意一个顶点作为起始点,并将之从 B 类移至 A 类;然后找出 B 类中到 A 类中的顶点之间权值最小的顶点,将之从 B 类移至 A 类,如此重复,直到 B 类中没有顶点为止。所走过的顶点和边就是该连通图的最小生成树。

下面来看一个例题:

例题中用&代表无穷。没有直接到达的边就写无穷。

选V1作为第一个生长点(第一个生长点可以随意选)。

设出两个集合,vertex1(用来装生长点),vertex2(用来装不是生长点的顶点)。

第一列为生长点的集合,第二列为不是生长点的集合。

由图可知V1到各个顶点的距离一下所示:

v2v3v4v5v6
{v1}{v2,v3,v4,v5,v6}

V1

6

V1

1

V1

5

V1

&

V1

&

 

明显可知:V3最小,所以V3为下一个生长点,V3进入到集合vertex1中。

接下来看,V3与各个点之间的距离,若比原来小则进行替换,若比原来大或等于原来的数值则不变。

v2v3v4v5v6
{v1}{v2,v3,v4,v5,v6}

V1

6

V1

1

V1

5

V1

&

V1

&

{V1,V3}{v2,v4,v5,v6}

v3

5

v1

5

v3

6

v3

4

显然v3到v6最小,则V6作为下一个生长点,v6进入到vertex1中

重复上述步骤:

v2v3v4v5v6
{v1}{v2,v3,v4,v5,v6}

V1

6

V1

1

V1

5

V1

&

V1

&

{V1,V3}{v2,v4,v5,v6}

v3

5

v1

5

v3

6

v3

4

{v1,v3,v6}{v2,v4,v5}

v3

5

v6

2

v3

6

v6到v4最小,所以v4作为下一个生长点,进入vertex1中

v2v3v4v5v6
{v1}{v2,v3,v4,v5,v6}

V1

6

V1

1

V1

5

V1

&

V1

&

{V1,V3}{v2,v4,v5,v6}

v3

5

v1

5

v3

6

v3

4

{v1,v3,v6}{v2,v4,v5}

v3

5

v6

2

v3

6

{v1,v3,v6,v4}{v2,v5}

v3

5

v3

6

这次v3到v2为最小生长点,所以v2进入到vertex1中

v2v3v4v5v6
{v1}{v2,v3,v4,v5,v6}

V1

6

V1

1

V1

5

V1

&

V1

&

{V1,V3}{v2,v4,v5,v6}

v3

5

v1

5

v3

6

v3

4

{v1,v3,v6}{v2,v4,v5}

v3

5

v6

2

v3

6

{v1,v3,v6,v4}{v2,v5}

v3

5

v3

6

{v1,v3,v6,v4,v2}{v5}

v2

3

当前只剩下一个v5,所以v5进入vertex1中

v2v3v4v5v6
{v1}{v2,v3,v4,v5,v6}

V1

6

V1

1

V1

5

V1

&

V1

&

{V1,V3}{v2,v4,v5,v6}

v3

5

v1

5

v3

6

v3

4

{v1,v3,v6}{v2,v4,v5}

v3

5

v6

2

v3

6

{v1,v3,v6,v4}{v2,v5}

v3

5

v3

6

{v1,v3,v6,v4,v2}{v5}

v2

3

所以最小生成树为:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值