建模算法(五)——图与网络
(一)图与网络的基本概念
一、无向图
含有的元素为顶点,弧和权重,但是没有方向
二、有向图
含有的元素为顶点,弧和权重,弧具有方向。
三、有限图、无限图
顶点和边有限就是有限图,否则就是无限图。
四、简单图
既没有环,也没有两条边连接同一对顶点的图
五、完全图、二分图
每一对不同的顶点都有一条边相连的简单图称为完全图。

六、子图
就是被包含的图
七、顶点的度
就是顶点连接了几条边。
性质: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)-1
temp=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))=[];
end result
算法二: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)<loop
temp=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)];
end
index(find(index==v2))=v1;
data(:,flag)=[];
index(:,flag)=[];
end result
(五)匹配问题
一、一些概念的理解= =


M其实就是边两端的点集
二、人员分配问题
1、提出

2、解决的算法
(1)匈牙利算法

(六)Euler图和Hamilton图
一、基本概念
1、Euler定义

Euler图就是能够不重复且走过每条边能够回到出发点的图。
2、定理:

3、Hamilton定义

Hamilton图就是能够不重复且走过每个顶点能够回到出发点的图。
二、Euler回路的Fleury算法
建模算法(五)——图与网络的更多相关文章
- [时序图笔记] 步步为营UML建模系列五、时序图(Squence diagram)【转】
概述 顺序图是一种详细表示对象之间以及对象与参与者实例之间交互的图,它由一组协作的对象(或参与者实例)以及它们之间可发送的消息组成,它强调消息之间的顺序. 顺序图是一种详细表示对象之间以及对象与系统外 ...
- 20145205 《Java程序设计》实验报告五:Java网络编程及安全
20145205 <Java程序设计>实验报告五:Java网络编程及安全 实验要求 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.客户端中输入明文,利用DES算法加密,D ...
- 20145212 实验五《Java网络编程》
20145212 实验五<Java网络编程> 一.实验内容 1.运行下载的TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成 ...
- Java实验报告五:Java网络编程及安全
Java实验报告五:Java网络编程及安全 ...
- 20145210实验五《Java网络编程》
20145210实验五<Java网络编程> 实验内容 1.运行下载的TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成代码, ...
- Powerdesigner数据库建模--概念模型--ER图【转】
转自http://www.cnblogs.com/dekevin/archive/2012/07/18/2596745.html Powerdesigner数据库建模--概念模型--ER图 目标: ...
- Enterprise Architect UML 建模之活动图
EA(Enterprise Architect) UML 建模之活动图 一.活动图的概念作用 活动图本质上是一种流程图,它描述活动的序列,即系统从一个活动到另一个活动的控制流. 活动图的作用:描述 ...
- 20145237 实验五《Java网络编程》
20145237 实验五<Java网络编程> 一.实验内容 •1.运行下载的TCP代码,结对进行,一人服务器,一人客户端: •2.利用加解密代码包,编译运行代码,一人加密,一人解密: •3 ...
- 20155229——实验五《 Java网络编程及安全》
20155229--实验五 Java网络编程及安全 实验内容 实验一: 两人一组结对编程: 参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA ...
随机推荐
- WPF 显示gif
using System; using System.IO; using System.Collections.Generic; using System.Windows; using System. ...
- Oracle 10g 和11g r2 下载地址(使用迅雷)
http://www.blogjava.net/wangdetian168/archive/2011/03/01/345428.html 10g http://www.blogjava.net/wa ...
- [Angularjs]ng-switch用法
用法描述 ng-switch根据表达式的值显示或这隐藏对应部分.类似c#或者其他预览里面的switch用法.可以慢慢体会. 说道ng-switch就要说到子元素该怎么根据当前值进行变化.子元素可以通过 ...
- wordPress Development
site:http://codex.wordpress.org/Theme_Development 2014-03-24 This article is about developing WordPr ...
- 唐巧的iOS技术博客选摘
1. 那些被遗漏的objective-c保留字:http://blog.devtang.com/blog/2013/04/29/the-missing-objc-keywords/ 2. 使用cr ...
- Unity 3D学习之 Prime31 Game Center插件用法
http://momowing.diandian.com/post/2012-11-08/40041806328 It's my life~: 为app 连入Game Center 功能而困扰的朋友们 ...
- 总结使用Unity 3D优化游戏运行性能的经验
原地址:http://www.gameres.com/msg_221889.html 作者:Amir Fasshihi 流畅的游戏玩法来自流畅的帧率,而我们即将推出的动作平台游戏<Shadow ...
- Unity模型导入的若干问题
原地址:http://tieba.baidu.com/p/2807225555 我觉得有三点感觉在导出时比较重要的1.单位的设置3dsmax系统单位设置就设成厘米显示单位公制也设成厘米这样在max里的 ...
- [Educational Codeforces Round 16]B. Optimal Point on a Line
[Educational Codeforces Round 16]B. Optimal Point on a Line 试题描述 You are given n points on a line wi ...
- Sqli-LABS通关笔录-1
在第一个关卡当中还是学到些知识. 1.注释语句多试试其他的几个 2.不报错可能是前面的语句没有错误,union没有得到执行. http://127.0.0.1/sql/Less-1/index.php ...