图论知识及运用举例.docx
- 文档编号:423448
- 上传时间:2022-10-10
- 格式:DOCX
- 页数:24
- 大小:187.31KB
图论知识及运用举例.docx
《图论知识及运用举例.docx》由会员分享,可在线阅读,更多相关《图论知识及运用举例.docx(24页珍藏版)》请在冰豆网上搜索。
图论知识及运用举例
图论知识及运用举例
1概论
图论中的“图”是指某类具体事物和这些事物之间的联系。
如果我们用点表示这些具体事物,用连接两点的线段(直的或曲的)表示两个事物的特定的联系,就得到了描述这个“图”的几何形象。
图论为任何一个包含了一种二元关系的离散系统提供了一个数学模型,借助于图论的概念、理论和方法,可以对该模型求解。
图是运筹学(OperationsResearch)中的一个经典和重要的分支,所研究的问题涉及经济管理、工业工程、交通运输、计算机科学与信息技术、通讯与网络技术等诸多领域。
下面将要讨论最短路问题、最大流问题、最小费用流问题和匹配问题等。
2图的基本概念
2.1无向图
一个无向图(undirectedgraph)
是由一个非空有限集合
和
中某些元素的无序对集合
构成的二元组,记为
。
其中
称为图
的顶点集(vertexset)或节点集(nodeset),
中的每一个元素
称为该图的一个顶点(vertex)或节点(node);
称为图
的边集(edgeset),
中的每一个元素
(即
中某两个元素
的无序对) 记为
或
,被称为该图的一条从
到
的边(edge)。
当边
时,称
为边
的端点,并称
与
相邻(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) 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) 一名货柜车司机奉命在最短的时间内将一车货物从甲地运往乙地。 从甲地到乙地的公路网纵横交错,因此有多种行车路线,这名司机应选择哪条线路呢?
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 知识 运用 举例