图论知识及运用举例文档格式.docx

上传人:b****1 文档编号:13351650 上传时间:2022-10-10 格式:DOCX 页数:24 大小:187.31KB
下载 相关 举报
图论知识及运用举例文档格式.docx_第1页
第1页 / 共24页
图论知识及运用举例文档格式.docx_第2页
第2页 / 共24页
图论知识及运用举例文档格式.docx_第3页
第3页 / 共24页
图论知识及运用举例文档格式.docx_第4页
第4页 / 共24页
图论知识及运用举例文档格式.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

图论知识及运用举例文档格式.docx

《图论知识及运用举例文档格式.docx》由会员分享,可在线阅读,更多相关《图论知识及运用举例文档格式.docx(24页珍藏版)》请在冰豆网上搜索。

图论知识及运用举例文档格式.docx

为边

的端点,并称

相邻(adjacent);

称为与顶点

关联(incident)。

如果某两条边至少有一个公共端点,则称这两条边在图

中相邻。

边上赋权的无向图称为赋权无向图或无向网络(undirectednetwork)。

我们对图和网络不作严格区分,因为任何图总是可以赋权的。

一个图称为有限图,如果它的顶点集和边集都有限。

的顶点数用符号

表示,边数用

表示。

当讨论的图只有一个时,总是用

来表示这个图。

从而在图论符号中我们常略去字母

,例如,分别用

代替

端点重合为一点的边称为环(loop)。

一个图称为简单图(simplegraph),如果它既没有环也没有两条边连接同一对顶点。

2.2有向图

定义一个有向图(directedgraph或digraph)

中某些元素的有序对集合

的顶点集或节点集,

称为该图的一个顶点或节点;

的弧集(arcset),

的有序对) 

的弧(arc)。

当弧

的尾(tail),

的头(head),并称弧

的出弧(outgoingarc),为

的入弧(incomingarc)。

对应于每个有向图

,可以在相同顶点集上作一个图

,使得对于

的每条弧,

有一条有相同端点的边与之相对应。

这个图称为

的基础图。

反之,给定任意图

,对于它的每个边,给其端点指定一个顺序,从而确定一条弧,由此得到一个有向图,这样的有向图称为

的一个定向图。

以下若未指明“有向图”三字,“图”字皆指无向图。

2.3完全图、二分图

每一对不同的顶点都有一条边相连的简单图称为完全图(completegraph)。

个顶点的完全图记为

(这里

表示集合

中的元素个数),

中无相邻顶点对,

中亦然,则称

为二分图(bipartitegraph);

特别地,若

,则

,则称

为完全二分图,记成

2.4子图

叫做图

的子图(subgraph),记作

,如果

的子图,则

称为

的母图。

的支撑子图(spanningsubgraph,又成生成子图)是指满足

的子图

2.5顶点的度

中与

关联的边数(每个环算作两条边)称为

的度(degree),记作

是奇数,称

是奇顶点(oddpoint);

是偶数,称

是偶顶点(evenpoint)。

关于顶点的度,我们有如下结果:

)任意一个图的奇顶点的个数是偶数。

2.6图与网络的数据结构

网络优化研究的是网络上的各种优化模型与算法.为了在计算机上实现网络优化的算法,首先我们必须有一种方法(即数据结构)在计算机上来描述图与网络。

一般来说,算法的好坏与网络的具体表示方法,以及中间结果的操作方案是有关系的。

这里我们介绍计算机上用来描述图与网络的5种常用表示方法:

邻接矩阵表示法、关联矩阵表示法、弧表表示法、邻接表表示法和星形表示法。

在下面数据结构的讨论中,我们首先假设

是一个简单有向图,

,并假设

中的顶点用自然数

表示或编号,

中的弧用自然数

表示或编号。

对于有多重边或无向网络的情况,我们只是在讨论完简单有向图的表示方法之后,给出一些说明。

)邻接矩阵表示法

邻接矩阵表示法是将图以邻接矩阵(adjacencymatrix)的形式存储在计算机中。

的邻接矩阵是如下定义的:

是一个

矩阵,即

也就是说,如果两节点之间有一条弧,则邻接矩阵中对应的元素为1;

否则为0。

可以看出,这种表示法非常简单、直接。

但是,在邻接矩阵的所有

个元素中,只有

个为非零元。

如果网络比较稀疏,这种表示法浪费大量的存储空间,从而增加了在网络中查找弧的时间。

)关联矩阵表示法

关联矩阵表示法是将图以关联矩阵(incidencematrix)的形式存储在计算机中.图

的关联矩阵

是如下定义的:

的矩阵,即

也就是说,在关联矩阵中,每行对应于图的一个节点,每列对应于图的一条弧。

如果一个节点是一条弧的起点,则关联矩阵中对应的元素为1;

如果一个节点是一条弧的终点,则关联矩阵中对应的元素为

如果一个节点与一条弧不关联,则关联矩阵中对应的元素为0。

对于简单图,关联矩阵每列只含有两个非零元(一个

,一个

)。

可以看出,这种表示法也非常简单、直接。

此外,还有邻接表表示法,弧表示法,星形表示法等。

2.7轨与连通

,其中

关联,称

是图

的一条道路(walk),

为路长,顶点

分别称为

的起点和终点,而

称为它的内部顶点。

若道路

的边互不相同,则

称为迹(trail)。

的顶点互不相同,则

称为轨(path)。

称一条道路是闭的,如果它有正的长且起点和终点相同。

起点和终点重合的轨叫做圈(cycle)。

若图

的两个顶点

间存在道路,则称

连通(connected)。

间的最短轨的长叫做

间的距离。

记作

的任二顶点均连通,则称

是连通图。

显然有:

)图

是一条轨的充要条件是

是连通的,且有两个一度的顶点,其余顶点的度为2;

是一个圈的充要条件是

是各顶点的度均为2的连通图。

3应用—最短路问题

3.1两个指定顶点之间的最短路径

问题如下:

给出了一个连接若干个城镇的铁路网络,在这个网络的两个指定城镇间,找一条最短铁路线。

以各城镇为图

的顶点,两城镇间的直通铁路为图

相应两顶点间的边,得图

的每一边

,赋以一个实数

—直通铁路的长度,称为

的权,得到赋权图

的子图的权是指子图的各边的权和。

问题就是求赋权图

中指定的两个顶点

间的具最小权的轨。

这条轨叫做

间的最短路,它的权叫做

间的距离,亦记作

求最短路已有成熟的算法:

迪克斯特拉(Dijkstra)算法,其基本思想是按距

从近到远为顺序,依次求得

的各顶点的最短路和距离,直至

(或直至

的所有顶点),算法结束。

为避免重复并保留每一步的计算信息,采用了标号算法。

下面是该算法。

)令

,对

,令

)对每个

),用

计算

,把达到这个最小值的一个顶点记为

).若

,停止;

,用

,转(

算法结束时,从

到各顶点

的距离由

的最后一次的标号

给出。

进入

之前的标号

叫T标号,

时的标号

叫P标号。

算法就是不断修改各项点的T标号,直至获得P标号。

若在算法运行过程中,将每一顶点获得P标号所由来的边在图上标明,则算法结束时,

至各项点的最短路也在图上标示出来了。

例1某公司在六个城市

中有分公司,从

的直接航程票价记在下述矩阵的

位置上。

表示无直接航路),请帮助该公司设计一张城市

到其它城市间的票价最便宜的路线图。

用矩阵

为顶点个数)存放各边权的邻接矩阵,行向量

分别用来存放

标号信息、标号顶点顺序、标号顶点索引、最短通路的值。

其中分量

存放始点到第

点最短通路中第

顶点前一顶点的序号;

存放由始点到第

点最短通路的值。

求第一个城市到其它城市的最短路径的Matlab程序如下:

clear;

clc;

M=10000;

a(1,:

)=[0,50,M,40,25,10];

a(2,:

)=[zeros(1,2),15,20,M,25];

a(3,:

)=[zeros(1,3),10,20,M];

a(4,:

)=[zeros(1,4),10,25];

a(5,:

)=[zeros(1,5),55];

a(6,:

)=zeros(1,6);

a=a+a'

;

pb(1:

length(a))=0;

pb

(1)=1;

index1=1;

index2=ones(1,length(a));

d(1:

length(a))=M;

d

(1)=0;

temp=1;

whilesum(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];

index=index1(find(d(index1)==d(temp)-a(temp,index1)));

iflength(index)>

=2

index=index

(1);

end

index2(temp)=index;

end

d,index1,index2

3.2每对顶点之间的最短路径

计算赋权图中各对顶点之间最短路径,显然可以调用Dijkstra算法。

具体方法是:

每次以不同的顶点作为起点,用Dijkstra算法求出从该起点到其余顶点的最短路径,反复执行

次这样的操作,就可得到从每一个顶点到其它顶点的最短路径。

这种算法的时间复杂度为

第二种解决这一问题的方法是由FloydRW提出的算法,称之为Floyd算法。

假设图

权的邻接矩阵为

来存放各边长度,其中:

之间没有边,在程序中以各边都不可能达到的充分大的数代替;

之间边的长度,

对于无向图,

是对称矩阵,

Floyd算法的基本思想是:

递推产生一个矩阵序列

表示从顶点

到顶点

的路径上所经过的顶点序号不大于

的最短路径长度。

计算时用迭代公式:

是迭代次数,

最后,当

时,

即是各顶点之间的最短通路值。

例2最短路问题(SPP-shortestpathproblem)

一名货柜车司机奉命在最短的时间内将一车货物从甲地运往乙地。

从甲地到乙地的公路网纵横交错,因此有多种行车路线,这名司机应选择哪条线路呢?

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1