算法基础:图的相关算法知识笔记
一、图的相关算法
1、图的分类知识
如下图:
2、生成树概念
对连通图进行遍历,过程中所经过的边和顶点的组合可看做是一棵普通树,通常称为生成树。
连通图的生成树具有这样的特征:边的数量 = 顶点数 - 1
3、最小生成树
在连通网的所有生成树中,所有边的代价和权值最小的生成树,称为最小生成树。
4、 最小生成树的算法
4.1普里姆算法(Prim算法)
它是图论中的一种算法,可在加权连通图里搜索最小生成树。即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点,且其所有边的权值之和亦为最小。该算法于1930年由捷克数学家沃伊捷赫·亚尔尼克(英语:Vojtěch Jarník)发现;并在1957年由美国计算机科学家罗伯特·普里姆(Robert C. Prim)独立发现;1959年,艾兹格·迪科斯彻再次发现了该算法。因此,在某些场合,普里姆算法又被称为DJP算法、亚尔尼克算法或普里姆-亚尔尼克算法。
算法如下:
void prim(MGraph g,int v)
{
int lowcost[MAXV],min,n=g.vexnum;
int closest[MAXV],i,j,k;
for (i=0;i<n;i++) //给lowcost[]和closest[]置初始值
{
lowcost[i]=g.edges[v][i];
closest[i]=v;
}
for (i=1;i<n;i++) //找出n-1个顶点
{
min=INF;
for (j=0;j<n;j++) //在(V-U)中找出离U最近的顶点k
if (lowcost[j]!=0 && lowcost[j]<min)
{
min=lowcost[j];k=j;
}
printf(" 边(%d,%d)权为:%d\n",closest[k],k,min);
lowcost[k]=0; //标记k已经加入U
for (j=0;j<n;j++) //修改数组lowcost和closest
if (g.edges[k][j]!=0 && g.edges[k][j]<lowcost[j])
{
lowcost[j]=g.edges[k][j];closest[j]=k;
}
}
}
算法过程
4.2 克鲁斯卡尔(Kruskal)算法
1、概念
该算法可以称为“加边法”,初始最小生成树边数为0,每迭代一次就选择一条满足条件的最小代价边,加入到最小生成树的边集合里。
2、算法步骤
1. 把图中的所有边按代价从小到大进行排序;
2. 把图中的n个顶点看成独立的n棵树组成的森林;
3. 按权值从小到大选择边,所选的边连接的两个顶点,应属于两颗不同的树,则成为最小生成树的一条边,并将这两颗树合并作为一颗树。
4. 重复(3),直到所有顶点都在一颗树内或者有n-1条边为止。
3、算法过程
5、最小生成树算法的应用
比如要在n个城市之间铺设光缆,主要目标是要使这 n 个城市的任意两个之间都可以通信,因为铺设光缆的费用很高,且各个城市之间铺设光缆的费用不同,因此另一个目标是要使铺设光缆的总费用最低。这个时候需要找到带权的最小生成树,来解决这个问题。
二、拓扑排序
1、定义
由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。
2、AOV网
在工程领域,一个大的工程通常会被划分为许多较少的子工程,当子工程都完成了,那么整个大工程也就完成了。若以顶点表示活动,用有向边表示子工程之间的优先关系。这样的有向图以顶点表示活动的网就是AOV网。AOV网表示了子工程之间的优先关系,也是活动进行时的制约关系。
3、拓扑排序
拓扑排序是将AOV网中所有的顶点排成一个线性序列的过程。并且满足:若在AOV网中从顶点A到B有一条路径,那么A比然在B之前。
4、执行步骤
(1) 选择一个入度为0的顶点并输出之;
(2) 从网中删除此顶点及所有出边。
循环结束后,若输出的顶点数小于网中的顶点数,则输出“有回路”信息,否则输出的顶点序列就是一种拓扑序列。
IT技术分享社区
个人博客网站:https://programmerblog.xyz
文章推荐程序员效率:画流程图常用的工具程序员效率:整理常用的在线笔记软件远程办公:常用的远程协助软件,你都知道吗?51单片机程序下载、ISP及串口基础知识硬件:断路器、接触器、继电器基础知识
算法基础:图的相关算法知识笔记相关推荐
- 算法基础-十大排序算法及其优化(文末有抽奖福利哦)
算法基础-十大排序算法及其优化 算法基础-十大排序算法及其优化 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Kw1LA5Q4-1607527572080)(/uplo ...
- 四足机器人运动运动控制系统及相关算法、导航系统及相关算法本人硕毕论文发表后再更
四足机器人运动运动控制系统及相关算法.导航系统及相关算法本人硕毕论文发表后再更
- 算法基础:k最近邻算法
本博客所有内容均整理自<算法图解>,欢迎讨论交流~ 了解过机器学习这个概念,一定知道有一种名为k最近邻的算法,简称KNN. 对于k最近邻算法的定义,百度百科是这样给出的:K最近邻(k-Ne ...
- 0302Prim算法-最小生成树-图-数据结构和算法(Java)
文章目录 1 Prim算法 1.1 概述 1.1.1 算法描述 1.1.2 数据结构 1.1.3 横切边集合维护 1.2 延时实现 1.2.1 实现代码 1.2.2 性能分析 1.3 即时实现 1.3 ...
- 时间复杂度o(n^0.5)_算法基础1.1:算法复杂度计算(二)
1.什么是算法 2.好算法的标准 3.算法复杂度计算方法 例1: 1 int sum = 0;//运行1次2 int total = 0;//运行1次3 for (int i = 1; i <= ...
- 计算机系统基础:设备管理采用的相关技术知识笔记
1.通道技术 设备管理的通道技术是为了数据传输可以独立于CPU,让CPU从繁琐的I/O工作中解脱出来.设置通道后,CPU.只需要向通道发I/O指令,通道接收到指令后,从主存中取出本次要执行的通道程序并 ...
- 算法基础入门——数论(数学知识基础)
文章目录 一.质数 分解质因数 题目 代码 筛选质数 埃氏筛法 题目 代码 线性筛法 二.约数 约数个数 试除法求约数个数(时间复杂度:O(sqrt(N)) ) 未完待续 一.质数 质数即因子只有1和 ...
- 多媒体基础:动画和视频知识笔记
1.动画和视频的概念 动画:将静态的图像.图形等按照一定的时间顺序显示而形成的连续的动态画面.传统意义来说动画是在连续多格的胶片上拍摄的一系列画面,比将胶片以一定的速度放映,从而产生动态的视觉技术. ...
- 算法基础部分6-贪心算法
算法部分 基础6 一.贪心算法简述 贪心算法的每一步行动总是按照某种指标选取最优的操作来进行该指标,只看眼前并不考虑以后可能造成的影响.证明方法通过替换法和数学归纳法实现. 二.贪心算法例子 1. ...
最新文章
- whoosh学习(1)
- 2021-07-08执行Linux的命令分析
- 《虚拟机深入应用实践》已经出版
- python获取按键状态_谁在用 python 弹奏一曲菊花台
- 关于java中::语法的理解
- oc---类方法load和initialize的区别
- 开源协议神图介绍 MIT 与 Apache 等
- Bootstrap表格内容垂直水平居中
- 基于php校园失物招领,校园失物招领系统设计
- node mysql json_Node.js JSON模块用法实例分析
- CSS如何让图片垂直并水平居中等比缩放?
- 现金支票打印模板excel_Excel的正确使用技巧-Excel的提速大法
- 久其报表大厅_久其报表是什么?
- PyTorch以及VGG模型
- 移动聚合支付招商,管道收入享长期分润
- Could not get unknown property ‘packageForR‘ for task ‘:app:processDebugResources‘ of type com.andro
- 微信小程序 登录与退出登录
- 用scrapy进行网页抓取
- h5 video 移动端 视频添加第一帧作为播放前图片
- Android-茫茫9个月求职路,终于拿满意offer
热门文章
- 一个javascript框架应有的功能
- 综述ASP.NET下的AJAX模式
- 浅析软件项目管理中十个误区(来自:http://manager.csdn.net/n/20051213/30907.html)
- js变量提升_一道JS变量提升题
- jar打包 剔除第三方依赖以及它的依赖_面试官:为什么Spring Boot的jar可以直接运行?...
- 坚果nuts 加速 官网_【喂你播】坚果手机2020新品发布会来了;三星定向华为手机推以旧换新...
- 优秀工程师应该具备哪些素质_一名优秀工程师所需要具备的条件和素质[1]
- 如何在vsc上下载php扩展包,正确的 Composer 扩展包安装方法
- 基于vue+mint-ui的mobile-h5的项目说明
- 阅读【现代网络技术 SDN/NFV/QOE 物联网和云计算】 第一章