最小生成树------Prim算法
定义:设G=(V,E)是一个无向连通图。如果G的生成子图T=(V,E’)是一棵树,则称T是G的一棵生成树(Spanning Tree)。

应用生成树可以得到关于一个电网的一组独立的回路方程。第一步是要得到这个电网的一棵生成树。设B是那些不在生成树中的电网的边的集合,从B中取出一条边添加到这生成树上就生成一个环。从B中取出不同的边就生成不同的环。把克希霍夫(Kirchoff)第二定律用到每一个环上,就得到一个回路方程。用这种方法所得到的环是独立的(即这些环中没有一个可以用那些剩下的环的线性组合来得到),这是因为每一个环包含一条从B中取来的边(生成树固定的情况下),而这条边不包含在任何其它的环中。因此,这样所得的这组回路方程也是独立的。可以证明,通过一次取B中的一条边放进所产生的生成树中而得到的这些环组成一个环基,从而这图中所有其它的环都能够用这个基中的这些环的线性组合构造出来。
生成树在其它方面也有广泛的应用。一种重要的应用是由生成树的性质所产生的,这一性质是,生成树是G的这样一个最小子图T,它使得V(T)=V(G)且T
连通并具有最少的边数。任何一个具有n个结点的连通图都必须至少有n-1条边,而所有具有n-1条边的n结点连通图都是树。如果G的结点代表城市,边代表连接两个城市的可能的交通线,则连接这n个城市所需要的最少交通线是n-l条。G的那些生成树代表所有可行的选择。
下面举个例子具体说明:
Prim最小生成树算法
line void Prim(edge[],COST[][],int n,&T[][],int minCOST) {
//edge()是G的边集。COST(n,n)是n结点图G的成本邻接矩阵,矩阵元素COST(i,j)是一个正实数,如果不存在边(i,j),则为+∞。计算一棵最小生成树并把它作为一个集合存放到数组T(1..n-1,2)中。(T(i,1),T(i,2))是最小成本生成树的一条边。最小成本生成树的总成本最后赋给minCOST。
float COST[n,n];float minCOST;
int near[],n,i,j,k,m,T[n-][];
(k,m) = 具有最小成本的边;
minCOST=COST(k,m);
(T(,),T(,)) = (k,m)
for(i=;i=n;++i) {//将near置初值
if(COST(i,m)<COST(i,k)) near[i]=m;
else { near[i]=k;};//if
};//for
near[k]=near[m]= for(i=;i<=n-;++i) { //找T的其余n-2条边
设j是near(j)≠0且COST[j][near[j]]最小的下标
(T(i,),T(i,))=(j,near[j]);
minCOST = minCOST + COST[j][near[j]];
near[j]=;
for(k=;k<=n;++k) { //修改near
if((near[k]!= && COST[k][near[k]])>COST[k][j])
{near[k]=j;
};//if
};//for
};//for
if(minCOST)→∞) { print(‘no spanning tree’)};//if
}//Prim
函数过程Prim所需要的时间是Θ(n2),其中n是图G的结点数。具体分析如下:第3行花费Θ(e) 时间,其中e=|E|。而第4行花费Θ(1)时间;第6~9行的循环花费Θ(n)时间;第12行和第16~20行的循环要求Θ(n)时间,因此第11~21行的循环的每一次选代要花费Θ(n)时间。所以这个循环的总时间是Θ(n2)。故过程Prim有Θ(n2)的时间复杂度。
因为最小生成树包含了与每个结点v相关的一条最小成本边,因此还可以把这算法稍许加快一点。为此,假设T是图G=(V,E)的最小成本生成树。设v是T中的任一结点。又设(v,w)是所有v相关的边中具有最小成本的一条边。假定(v,w)不属于E(T),且对于所有的边(v,x)∈E(T),COST(v,w)<COST(v,x)。把(v,w)包含到T中就生成一个唯一的环。这个环必定包括一条边(v,x),x≠w。从E(T) ∪{(v,w)}中去掉边(v,x)就破坏了这个环而且没有使图(v,E(T)∪{(v,w)}-{(v,x)})不连通,因此该图也是一棵生成树。由于COST(v,w)<COST(v,x),所以这棵生成树比T有更小的成本。这与T是G中最小成本生成树相矛盾。故T包含如上所述的那样的最小成本边。
最小生成树------Prim算法的更多相关文章
- 数据结构代码整理(线性表,栈,队列,串,二叉树,图的建立和遍历stl,最小生成树prim算法)。。持续更新中。。。
//归并排序递归方法实现 #include <iostream> #include <cstdio> using namespace std; #define maxn 100 ...
- 最小生成树Prim算法(邻接矩阵和邻接表)
最小生成树,普利姆算法. 简述算法: 先初始化一棵只有一个顶点的树,以这一顶点开始,找到它的最小权值,将这条边上的令一个顶点添加到树中 再从这棵树中的所有顶点中找到一个最小权值(而且权值的另一顶点不属 ...
- 最小生成树—prim算法
最小生成树prim算法实现 所谓生成树,就是n个点之间连成n-1条边的图形.而最小生成树,就是权值(两点间直线的值)之和的最小值. 首先,要用二维数组记录点和权值.如上图所示无向图: int map[ ...
- Highways POJ-1751 最小生成树 Prim算法
Highways POJ-1751 最小生成树 Prim算法 题意 有一个N个城市M条路的无向图,给你N个城市的坐标,然后现在该无向图已经有M条边了,问你还需要添加总长为多少的边能使得该无向图连通.输 ...
- SWUST OJ 1075 求最小生成树(Prim算法)
求最小生成树(Prim算法) 我对提示代码做了简要分析,提示代码大致写了以下几个内容 给了几个基础的工具,邻接表记录图的一个的结构体,记录Prim算法中最近的边的结构体,记录目标边的结构体(始末点,值 ...
- 图论算法(五)最小生成树Prim算法
最小生成树\(Prim\)算法 我们通常求最小生成树有两种常见的算法--\(Prim\)和\(Kruskal\)算法,今天先总结最小生成树概念和比较简单的\(Prim\)算法 Part 1:最小生成树 ...
- 最小生成树,Prim算法与Kruskal算法,408方向,思路与实现分析
最小生成树,Prim算法与Kruskal算法,408方向,思路与实现分析 最小生成树,老生常谈了,生活中也总会有各种各样的问题,在这里,我来带你一起分析一下这个算法的思路与实现的方式吧~~ 在考研中呢 ...
- 最小生成树——prim算法
prim算法是选取任意一个顶点作为树的一个节点,然后贪心的选取离这棵树最近的点,直到连上所有的点并且不够成环,它的时间复杂度为o(v^2) #include<iostream>#inclu ...
- 最小生成树--Prim算法,基于优先队列的Prim算法,Kruskal算法,Boruvka算法,“等价类”UnionFind
最小支撑树树--Prim算法,基于优先队列的Prim算法,Kruskal算法,Boruvka算法,“等价类”UnionFind 最小支撑树树 前几节中介绍的算法都是针对无权图的,本节将介绍带权图的最小 ...
- 求最小生成树(Prim算法)(1075)
Description 求出给定无向带权图的最小生成树.图的定点为字符型,权值为不超过100的整形.在提示中已经给出了部分代码,你只需要完善Prim算法即可. Input 第一行为图的顶点个数n ...
随机推荐
- [九度OJ]1113.二叉树(求完全二叉树任意结点所在子树的结点数)
原题链接:http://ac.jobdu.com/problem.php?pid=1113 题目描述: 如上所示,由正整数1,2,3……组成了一颗特殊二叉树.我们已知这个二叉树的最后一个结点是n.现在 ...
- 【暑假】[数学]UVa 10375 Choose and divide
UVa 10375 Choose and divide 题目: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19601 思路 ...
- Tcp服务端判断客户端是否断开连接
今天搞tcp链接弄了一天,前面创建socket,绑定,监听等主要分清自己的参数,udp还是tcp的.好不容易调通了,然后就是一个需求,当客户端主动断开连接时,服务端也要断开连接,这样一下次客户端请求链 ...
- JDBC注册驱动的三种方式
JDBC注册驱动的三种方式 1.通过导入的JDBC的驱动包拿到的com.mysql.jdbc.Driver对象,利用java.sql.DriverManager对象的DriverManager.reg ...
- 说说QQ空间SEO
其实这个话题由来已久,已经有很多大神做到QQ空间日访问量破万,甚至更多了,卖产品卖到抽筋儿. 怎么说QQ空间SEO,其实不如说QQ空间引流更合适,因为QQ空间与QQ的特殊关系,SEO貌似不是很重要,其 ...
- 32位Ubuntu12.04搭建Hadoop2.5.1完全分布式环境
准备工作 1.准备安装环境: 4台PC,均安装32位Ubuntu12.04操作系统,统一用户名和密码 交换机1台 网线5根,4根分别用于PC与交换机相连,1根网线连接交换机和实验室网口 2.使用ifc ...
- nyoj 891 找点
找点 时间限制:2000 ms | 内存限制:65535 KB 难度:2 描述 上数学课时,老师给了LYH一些闭区间,让他取尽量少的点,使得每个闭区间内至少有一个点.但是这几天LYH太忙了,你们帮 ...
- [iOS基础控件 - 3.2] transform的使用
A.概念 可以控制UIView的位置.尺寸.旋转 transform是一种状态,每次都是相对于原始状态作出的形变 1.位置移动 // 向上移动 - (IBAction)top:(UIButto ...
- iOS开发-控件设置
一.用户界面控件共有三种基本模式:动态.静态(非动态)和被动 动态:点击它们时会发生事情——通常是出发一段自己编写的时间代码. 被动:仅用于存储用户输入的值,以备后续使用.这些控件不会触发任何操作方法 ...
- ABAP ALV 颜色设置(行,列,单元格)
BCALV_EDIT_03 http://blog.sina.com.cn/s/blog_a87b19300102who3.html 关于ALV表格颜色,这种需求在项目中会经常用到. 列颜色 列的颜色 ...