建模算法(五)——图与网络
(一)图与网络的基本概念
一、无向图
含有的元素为顶点,弧和权重,但是没有方向
二、有向图
含有的元素为顶点,弧和权重,弧具有方向。
三、有限图、无限图
顶点和边有限就是有限图,否则就是无限图。
四、简单图
既没有环,也没有两条边连接同一对顶点的图
五、完全图、二分图
每一对不同的顶点都有一条边相连的简单图称为完全图。
六、子图
就是被包含的图
七、顶点的度
就是顶点连接了几条边。
性质:1、全部顶点的度相加为偶数
2、 任意一个图的奇顶点的个数为偶数。
(二)图与网络的数据结构
一、邻接矩阵表示法
1、定义:
就是0-1矩阵,如果元素cij为“1”表示弧从第i个到第j个点,为“0”的话表示没有。如果是无向图则必定cij=cji。
2、一个demo:
3、缺点
浪费大量的空间
二、关联矩阵表示法
1、定义
在关联矩阵中,每行对应图的一个节点,每列对应图的一条弧。如果元素为“1”为一条弧的起点,元素为“-1”是一条弧的终点,元素为“0”与弧没有关联。
2、缺点:
浪费大量的弓箭
3、一个demo
三、弧表表示法
1、定义:
上面两种方法都是以点优先,这种方法以边优先,记录下来每个边的起点,终点和权重。
2、一个demo
四、邻接表表示法
1、定义
就是用一个单向链表存储所有的顶点,然后每个顶点又是一个单向链表的头指针, 引导着每个由它出发的弧。
2、一个demo
五、星形表示法
1、前向星形表示法
(1)定义:
定义2个数组,一个数组记录边信息的数组,跟换标表示法类似,然后还有一个数组记录每个出弧的起始地址编号
(2)demo
(3)性质
a、在point数组中,节点号比图的顶点多一个,一定要有point(1)=1,point(n)=m+1,
b、对于一个节点i,其对应的弧的信息数组的位置区间为
如果,则没有出弧。
(4)评价
能快速检索每个节点的所有出弧,但是没有办法快速检索每个节点的所有入弧。
2、后向星形表示法
(1)定义:
定义2个数组,一个数组记录边信息的数组,跟换标表示法类似,然后还有一个数组记录每个出弧的起始地址编号,但是是记录从终点到顶点。
(2)demo
3、双星型表示法
(1)加前向星形表示法的基础上,再加上一个正向弧对应的编号即可
(2)demo
(三)应用——最短路问题
一、从指定1点到其他所有点的最短路径(无向图)
1、算法
例子:
MATLAB编程求解
clc,clear; a=zeros(6); a(1,2)=50;a(1,4)=40;a(1,5)=25;a(1,6)=10; a(2,3)=15;a(2,4)=20;a(2,6)=25; a(3,4)=10;a(3,5)=20; a(4,5)=10;a(4,6)=25; a(5,6)=55; a=a+a'; ll=find(a==0); a(ll)=inf; pb(1:length(a))=0;pb(1)=1;index1=1;index2=ones(1,length(a)); d(1:length(a))=inf;d(1)=0;temp=1; %pb是用来标记是否走过(每次取最小路径所到达的地点),index1是指遍历地点的路径,index2是指到底地点前一个地点,然后从index1
%中找到它的最短路径。d是记录从1到每个地点的最短路径。 while sum(pb)<length(a)tb=find(pb==0); %取出没走过的点d(tb)=min(d(tb),d(temp)+a(temp,tb)); %用上一次的最小值,和前者与这次的步径相加相比较,得出当前的最短路径tmpb=find(d(tb)==min(d(tb))); temp=tb(tmpb(1)); %取出目前最短的路径,然后选定为下一个起点pb(temp)=1;index1=[index1,temp];temp2=find(d(index1)==d(temp)-a(temp,index1)); %确定到目前点之前一点,确定的方法是用到此点的最短路径减去这次走的路径与之前的最短路径作比较。(按
%index1顺序),这样就可以得到上次来到此地的点。index2(temp)=index1(temp2(1)); end d,index1,index2
二、两个指定顶点之间的最短路径(有向图)
1、解法
约束条件的理解:i=1表示地点,当然不用回来了,出弧减入弧为1
i=n表示终点,当然不用出去了,出弧减入弧为-1
其他点有出有进,所以为0
2、demo
思路一:
以dp的思想来做,这样的话,通过递归来做就可以
思路二:
直接遍历,但是进行一个比较,明显不是最优解的省去
(四)树
一、基本概念
这里讲解的树为连通图的生成树。
二、应用——连线问题
解题思路:就是在连通赋权图上求解出最小生成树。
算法一:prim算法构造最小生成树
1、思想:
先定义一个顶点的集合,定义一个边的集合。然后构造一个最小生成树。然后选一点,从这点出发,一直寻找权重最小的边,加入到边的集合,直到涵盖了全部顶点为止。
2、demo
clc;clear; a=zeros(7);a(1,2)=50;a(1,3)=60; a(2,4)=65;a(2,5)=40; a(3,4)=52;a(3,7)=45; a(4,5)=50;a(4,6)=30;a(4,7)=42; a(5,6)=70;a=a+a'; a(find(a==0))=inf; result=[];p=1;tb=2:length(a); while length(result)~=length(a)-1temp=a(p,tb); %取出p向量里储存的顶点到其他未选中的点的边temp=temp(:);d=min(temp); %从中取出最小的,加入到result,将这个边的终点加入向量p[jb,kb]=find(a(p,tb)==d);j=p(jb(1));k=tb(kb(1));result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[]; endresult
算法二:Kruskal算法
1、思想
用index来存储各边端点的信息,当选中某一个边的时候,就将这边较的端点改为较小的端点,把后面的出现的也一并改掉,也就是所把这条边删掉。
2、demo
clc;clear;a(1,2)=50;a(1,3)=60; a(2,4)=65;a(2,5)=40; a(3,4)=52;a(3,7)=45; a(4,5)=50;a(4,6)=30;a(4,7)=42; a(5,6)=70;[i,j,b]=find(a); data=[i';j';b']; %data存储每条边的端点和权值,index记录每条边的端点 index=data(1:2,:); loop=max(size(a))-1; result=[];while length(result)<looptemp=min(data(3,:));flag=find(data(3,:)==temp);flag=flag(1);v1=data(1,flag);v2=data(2,flag); %每次找到之后,将数据存入data,而index就开始将线变成点,主要就是用来检验已经取过的树有没有已经走过这两点,
%从而避免圈的出现。if index(1,flag)~=index(2,flag)result=[result,data(:,flag)];endindex(find(index==v2))=v1;data(:,flag)=[];index(:,flag)=[]; endresult
(五)匹配问题
一、一些概念的理解= =
M其实就是边两端的点集
二、人员分配问题
1、提出
2、解决的算法
(1)匈牙利算法
(六)Euler图和Hamilton图
一、基本概念
1、Euler定义
Euler图就是能够不重复且走过每条边能够回到出发点的图。
2、定理:
3、Hamilton定义
Hamilton图就是能够不重复且走过每个顶点能够回到出发点的图。
二、Euler回路的Fleury算法
建模算法(五)——图与网络相关推荐
- CV之IE之Inception:基于TF框架利用Inception模型+GD算法的某层网络图像生成不同尺寸和质量的Deep Dream幻觉梦境图片(特征可视化实现图像可解释性)—五个架构设计思维导图
CV之IE之Inception:基于TF框架利用Inception模型+GD算法的某层网络图像生成不同尺寸和质量的Deep Dream幻觉梦境图片(特征可视化实现图像可解释性)-五个架构设计思维导图 ...
- 从数据结构到算法:图网络方法初探
如果说 2019 年机器学习领域什么方向最火,那么必然有图神经网络的一席之地.其实早在很多年前,图神经网络就以图嵌入.图表示学习.网络嵌入等别名呈现出来,其实所有的这些方法本质上都是作用在图上的机器学 ...
- pagerank数据集_从数据结构到算法:图网络方法初探
机器之心原创 作者:朱梓豪编辑:Qing Lin 如果说 2019 年机器学习领域什么方向最火,那么必然有图神经网络的一席之地.其实早在很多年前,图神经网络就以图嵌入.图表示学习.网络嵌入等别名呈现出 ...
- 特征图注意力_从数据结构到算法:图网络方法初探
作者 | 朱梓豪 来源 | 机器之心 原文 | 从数据结构到算法:图网络方法初探 如果说 2019 年机器学习领域什么方向最火,那么必然有图神经网络的一席之地.其实早在很多年前,图神经网络就以图嵌入. ...
- 数学建模--图与网络(1)
数学建模–图与网络(1) 图和网络是数学建模中用到的频率较高,也是很多基本问题的基础,这里介绍一些图与网络的用法,这里先介绍Matlab中最小生成树和最短路径之中自带代码的使用 基本知识预备(数据结构 ...
- 【论文翻译】Cluster-GCN:用于训练深度和大型图卷积网络的高效算法
Cluster-GCN: An Efficient Algorithm for Training Deep and Large Graph Convolutional Networks 聚类GCN:一 ...
- 系统分析与设计作业(五):业务建模与活动图图绘制
系统分析与设计作业(五):业务建模与活动图图绘制 题目 题目 1. 根据订旅馆建模文档,Asg-RH.pdf: 绘制用例图模型(到子用例) 给出 make reservation 用例的活动图 2.根 ...
- 数学建模(五):图与网络模型
&1.概论 历史上第一篇图论论文,是欧拉提出著名的"哥尼斯堡七桥问题",那个图就是这样的: 图论中的图,实际上表达的是某些指定事物以及它们之间的联系.比如"七桥问 ...
- 【十五】Java网络编程思维导图
知识章节参考:[十五]Java网络编程
- ESWC 2018 | R-GCN:基于图卷积网络的关系数据建模
目录 前言 1. 关系图卷积网络 2. 正则化 3. 实验 3.1 节点分类 3.2 链接预测 前言 题目: Modeling Relational Data with Graph Convoluti ...
最新文章
- opencv 二值化 python_Python OpenCV 图像二值化-阈值分割
- setTimeOut传参数
- Python数据科学|第一章:数据科学家的武器库
- 计算机英语四六级考试时间,英语四六级口语考试时间
- zabbix监控SNMP
- 简易OA漫谈之工作流设计(一个Demo),完成6年前的一个贴子
- 常用的DIV+CSS网站布局的基本框架结构-完整版
- 《视觉SLAM十四讲》笔记
- vue+html5实现分类、商品分类、类别、菜单的左右层级布局两种不同精美样式
- 机工士姆斯塔迪奥分数 20作者 DAI, Longao单位 杭州百腾教育科技有限公司
- java启动临时文件_springboot临时文件存储目录配置
- Linux系统启动分析
- Excel表格×××号码如何一键提取性别、年龄、出生年月
- elementUI踩坑记录-el-table
- 虚幻引擎图文笔记:什么是蒙太奇(Montage)之 概念和原理
- 三、安装 Entity Framework Core
- 统计学习:模型评估与选择--留出法(python实现)
- 计算机网络网络适配器的作用是什么原因,网络适配器的作用_网络适配器删了怎么办...
- ros打开笔记本摄像头,单目标定
- 华为P30Pro手机多摄像头变焦本质 + 拍照原理深度解析 + 单反微单Vs手机
热门文章
- 网络时间同步系统(NTP授时服务器)在电信网络的技术性应用研究
- .Net之路(四)利用DataTable、DataSet返回SQL Server的表或者单个字段
- live555源码编译(win7+vs2010)
- 史玉柱:创业不是靠忽悠,我的最后四个忠告
- 从零基础入门Tensorflow2.0 ----八、40. keras分布式实战
- GDAL和GeoPandas的安装
- 压力测试jmeter入门教程
- oracle 检查链接数,oracle连接数检查
- 带ant 的收发器_ANT无线收发器nRF24AP1及其应用
- linux nohup 记录pid,nohup启动程序后如何获取进程号Pid