2021-03-08 作业一

前言

最小生成树:一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。
最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法求出。

一、prim算法-让一颗小树长大

prim算法
以点为对象,挑选与点相连的最短边来构成最小生成树。

1.分步图解

在这里插入图片描述

在这里插入图片描述

2.代码示例

T={};
TV={0};
while(T contains fewer than n-1 edges){
	let (u,v) be a least cost edge suah that u in TV and v not in TV;
if(there is no such edge)break;
add v to TV;
add (u,v) to T;
}
if(T contains fewer than n-1 edges)
	printf(“No spanning tree\n”);

3.算法复杂度

Prim算法:O(eloge)

二、kruskal算法-将森林合并成树

prim算法
以边为对象,不断地加入新的不构成环路的最短边来构成最小生成树。

1.分步图解

在这里插入图片描述

在这里插入图片描述

2.代码示例

	T={}while(T contains less than n-1 edges && E is not empty){
		chooose a least cost edge (v,w) from E;
		delete (v,w) from E;
if ( ( v,w ) dose not create a cycle int T)
	add (v,w) to T;
else
	discard(v,w);
}
if (T contains fewer than n-1 edges)
	printf(“No spanning tree\n”);

3.算法复杂度

Kruskal算法:O(n²)

GitHub源码地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值