收藏 分享(赏)

图论基础知识汇总(适合建模).doc

上传人:精品资料 文档编号:9637680 上传时间:2019-08-19 格式:DOC 页数:24 大小:1.41MB
下载 相关 举报
图论基础知识汇总(适合建模).doc_第1页
第1页 / 共24页
图论基础知识汇总(适合建模).doc_第2页
第2页 / 共24页
图论基础知识汇总(适合建模).doc_第3页
第3页 / 共24页
图论基础知识汇总(适合建模).doc_第4页
第4页 / 共24页
图论基础知识汇总(适合建模).doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

1、-1-图与网络模型及方法1 概论图论起源于 18 世纪。第一篇图论论文是瑞士数学家欧拉于 1736 年发表的“哥尼斯堡的七座桥” 。1847 年,克希霍夫为了给出电网络方程而引进了“树”的概念。1857 年,凯莱在计数烷 的同分异构物时,也发现了“树” 。哈密尔顿于 18592nHC年提出“周游世界”游戏,用图论的术语,就是如何找出一个连通图中的生成圈,近几十年来,由于计算机技术和科学的飞速发展,大大地促进了图论研究和应用,图论的理论和方法已经渗透到物理、化学、通讯科学、建筑学、生物遗传学、心理学、经济学、社会学等学科中。图论中所谓的“图”是指某类具体事物和这些事物之间的联系。如果我们用点表示

2、这些具体事物,用连接两点的线段(直的或曲的)表示两个事物的特定的联系,就得到了描述这个“图”的几何形象。图论为任何一个包含了一种二元关系的离散系统提供了一个数学模型,借助于图论的概念、理论和方法,可以对该模型求解。哥尼斯堡七桥问题就是一个典型的例子。在哥尼斯堡有七座桥将普莱格尔河中的两个岛及岛与河岸联结起来问题是要从这四块陆地中的任何一块开始通过每一座桥正好一次,再回到起点。当然可以通过试验去尝试解决这个问题,但该城居民的任何尝试均未成功。欧拉为了解决这个问题,采用了建立数学模型的方法。他将每一块陆地用一个点来代替,将每一座桥用连接相应两点的一条线来代替,从而得到一个有四个“点” ,七条“线”

3、的“图”。问题成为从任一点出发一笔画出七条线再回到起点。欧拉考察了一般一笔画的结构特点,给出了一笔画的一个判定法则:这个图是连通的,且每个点都与偶数线相关联,将这个判定法则应用于七桥问题,得到了“不可能走通”的结果,不但彻底解决了这个问题,而且开创了图论研究的先河。图与网络是运筹学(Operations Research)中的一个经典和重要的分支,所研究的问题涉及经济管理、工业工程、交通运输、计算机科学与信息技术、通讯与网络技术等诸多领域。下面将要讨论的最短路问题、最大流问题、最小费用流问题和匹配问题等都是图与网络的基本问题。我们首先通过一些例子来了解网络优化问题。例 1 最短路问题(SPPs

4、hortest path problem)一名货柜车司机奉命在最短的时间内将一车货物从甲地运往乙地。从甲地到乙地的公路网纵横交错,因此有多种行车路线,这名司机应选择哪条线路呢?假设货柜车的运行速度是恒定的,那么这一问题相当于需要找到一条从甲地到乙地的最短路。例 2 公路连接问题某一地区有若干个主要城市,现准备修建高速公路把这些城市连接起来,使得从其中任何一个城市都可以经高速公路直接或间接到达另一个城市。假定已经知道了任-2-意两个城市之间修建高速公路的成本,那么应如何决定在哪些城市间修建高速公路,使得总成本最小?例 3 指派问题(assignment problem)一家公司经理准备安排 名员

5、工去完成 项任务,每人一项。由于各员工的特N点不同,不同的员工去完成同一项任务时所获得的回报是不同的。如何分配工作方案可以使总回报最大?例 4 中国邮递员问题(CPPchinese postman problem )一名邮递员负责投递某个街区的邮件。如何为他(她)设计一条最短的投递路线(从邮局出发,经过投递区内每条街道至少一次,最后返回邮局)?由于这一问题是我国管梅谷教授 1960 年首先提出的,所以国际上称之为中国邮递员问题。例 5 旅行商问题(TSPtraveling salesman problem )一名推销员准备前往若干城市推销产品。如何为他(她)设计一条最短的旅行路线(从驻地出发,

6、经过每个城市恰好一次,最后返回驻地)?这一问题的研究历史十分悠久,通常称之为旅行商问题。例 6 运输问题(transportation problem)某种原材料有 个产地,现在需要将原材料从产地运往 个使用这些原材料的MN工厂。假定 个产地的产量和 家工厂的需要量已知,单位产品从任一产地到任一N工厂的运费已知,那么如何安排运输方案可以使总运输成本最低?上述问题有两个共同的特点:一是它们的目的都是从若干可能的安排或方案中寻求某种意义下的最优安排或方案,数学上把这种问题称为最优化或优化(optimization)问题;二是它们都易于用图形的形式直观地描述和表达,数学上把这种与图相关的结构称为网络

7、(network) 。与图和网络相关的最优化问题就是网络最优化或称网络优化 (netwok optimization)问题。所以上面例子中介绍的问题都是网络优化问题。由于多数网络优化问题是以网络上的流(flow )为研究的对象,因此网络优化又常常被称为网络流(network flows )或网络流规划等。下面首先简要介绍图与网络的一些基本概念。2 图与网络的基本概念2.1 无向图一个无向图(undirected graph) 是由一个非空有限集合 和 中某些元素G)(GV的无序对集合 构成的二元组,记为 。其中)(E),(E称为图 的顶点集(vertex set)或节点集(node set)

8、, ,)(21nvGV中的每一个元素 称为该图的一个顶点(vertex)或节点(node) ;),21ni称为图 的边集(edge set) , 中的每一个元素 (即,me )(ke中某两个元素 的无序对) 记为 或 )(ji ),(jikveijjikve,被称为该图的一条从 到 的边(edge ) 。,21kij当边 时,称 为边 的端点,并称 与 相邻(adjacent) ;边jikvjiv,kji称为与顶点 关联(incident) 。如果某两条边至少有一个公共端点,则称这两ke,条边在图 中相邻。G边上赋权的无向图称为赋权无向图或无向网络(undirected network) 。我

9、们对图和网络不作严格区分,因为任何图总是可以赋权的。-3-一个图称为有限图,如果它的顶点集和边集都有限。图 的顶点数用符号 或G|V表示,边数用 或 表示。)(G|E)(G当讨论的图只有一个时,总是用 来表示这个图。从而在图论符号中我们常略去字母 ,例如,分别用 和 代替 和 。,V)(,)(E端点重合为一点的边称为环(loop)。一个图称为简单图(simple graph),如果它既没有环也没有两条边连接同一对顶点。2.2 有向图定义 一个有向图(directed graph 或 digraph) 是由一个非空有限集合 和GV中某些元素的有序对集合 构成的二元组,记为 。其中VA),(AV称

10、为图 的顶点集或节点集, 中的每一个元素,21nvG称为该图的一个顶点或节点; 称为图 的弧集)(iv ,21ma(arc set) , 中的每一个元素 (即 中某两个元素 的有序对) 记为kajiv或 ,被称为该图的一条从 到 的弧(arc) 。,jika),21(nkajik当弧 时,称 为 的尾(tail) , 为 的头(head) ,并称弧 为jivi jvk ka的出弧(outgoing arc) ,为 的入弧(incoming arc) 。ivjv对应于每个有向图 ,可以在相同顶点集上作一个图 ,使得对于 的每条弧,DGD有一条有相同端点的边与之相对应。这个图称为 的基础图。反之,

11、给定任意图GD,对于它的每个边,给其端点指定一个顺序,从而确定一条弧,由此得到一个有向图,这样的有向图称为 的一个定向图。G以下若未指明“有向图”三字, “图”字皆指无向图。2.3 完全图、二分图每一对不同的顶点都有一条边相连的简单图称为完全图(complete graph)。 个顶n点的完全图记为 。nK若 , , (这里 表示集合 中的元素YXV)(0|YX|X个数) , 中无相邻顶点对, 中亦然,则称 为二分图 (bipartite graph);特别地,G若 ,则 ,则称 为完全二分图,记成 。 yx, )(Ex |,|YK2.4 子图图 叫做图 的子图(subgraph) ,记作 ,

12、如果 ,HGH)(GV。若 是 的子图,则 称为 的母图。)(E的支撑子图(spanning subgraph,又成生成子图)是指满足 的子H图 。2.5 顶点的度设 , 中与 关联的边数(每个环算作两条边)称为 的度(degree),)(Vvv v记作 。若 是奇数,称 是奇顶点(odd point); 是偶数,称 是偶顶点d )(d(even point)。关于顶点的度,我们有如下结果:(i) Vv2-4-(ii) 任意一个图的奇顶点的个数是偶数。2.6 图与网络的数据结构网络优化研究的是网络上的各种优化模型与算法为了在计算机上实现网络优化的算法,首先我们必须有一种方法(即数据结构)在计算

13、机上来描述图与网络。一般来说,算法的好坏与网络的具体表示方法,以及中间结果的操作方案是有关系的。这里我们介绍计算机上用来描述图与网络的 5 种常用表示方法:邻接矩阵表示法、关联矩阵表示法、弧表表示法、邻接表表示法和星形表示法。在下面数据结构的讨论中,我们首先假设 是一个简单有向图, ,并假设 中的顶点用),(AVGmAnV|,| V自然数 表示或编号, 中的弧用自然数 表示或编号。对于有多重边n,21 21或无向网络的情况,我们只是在讨论完简单有向图的表示方法之后,给出一些说明。(i)邻接矩阵表示法邻接矩阵表示法是将图以邻接矩阵(adjacency matrix)的形式存储在计算机中。图 的邻

14、接矩阵是如下定义的: 是一个 的 矩阵,即),(Cn0,nnijcC1,0)(.,Aij也就是说,如果两节点之间有一条弧,则邻接矩阵中对应的元素为 1;否则为 0。可以看出,这种表示法非常简单、直接。但是,在邻接矩阵的所有 个元素中,只有2n个为非零元。如果网络比较稀疏,这种表示法浪费大量的存储空间,从而增加了在m网络中查找弧的时间。例 7 对于右图所示的图,可以用邻接矩阵表示为 010010同样,对于网络中的权,也可以用类似邻接矩阵的 矩阵表示。只是此时一n条弧所对应的元素不再是 1,而是相应的权而已。如果网络中每条弧赋有多种权,则可以用多个矩阵表示这些权。(ii)关联矩阵表示法关联矩阵表示

15、法是将图以关联矩阵(incidence matrix)的形式存储在计算机中图 的关联矩阵 是如下定义的: 是一个 的矩阵,即),(AVGBBmn,mnmnikbB1,0., ,),(, ,1其 它 Aijkjik也就是说,在关联矩阵中,每行对应于图的一个节点,每列对应于图的一条弧。如果一个节点是一条弧的起点,则关联矩阵中对应的元素为 1;如果一个节点是一条-5-弧的终点,则关联矩阵中对应的元素为 ;如果一个节点与一条弧不关联,则关联1矩阵中对应的元素为 0。对于简单图,关联矩阵每列只含有两个非零元(一个 ,一1个 ) 。可以看出,这种表示法也非常简单、直接。但是,在关联矩阵的所有 个1 nm元

16、素中,只有 个为非零元。如果网络比较稀疏,这种表示法也会浪费大量的存储m2空间。但由于关联矩阵有许多特别重要的理论性质,因此它在网络优化中是非常重要的概念。例 8 对于例 7 所示的图,如果关联矩阵中每列对应弧的顺序为(1,2),(1,3) ,(2,4),(3,2),(4,3),(4,5) ,(5,3)和(5,4),则关联矩阵表示为 1001010同样,对于网络中的权,也可以通过对关联矩阵的扩展来表示。例如,如果网络中每条弧有一个权,我们可以把关联矩阵增加一行,把每一条弧所对应的权存储在增加的行中。如果网络中每条弧赋有多个权,我们可以把关联矩阵增加相应的行数,把每一条弧所对应的权存储在增加的行

17、中。(iii )弧表示法弧表表示法将图以弧表(arc list)的形式存储在计算机中。所谓图的弧表,也就是图的弧集合中的所有有序对。弧表表示法直接列出所有弧的起点和终点,共需个存储单元,因此当网络比较稀疏时比较方便。此外,对于网络图中每条弧上的m2权,也要对应地用额外的存储单元表示。例如,例 7 所示的图,假设弧(1,2),(1,3) ,(2,4),(3,2),(4,3) ,(4,5),(5,3)和(5,4)上的权分别为 8,9 ,6,4,0,3,6 和 7,则弧表表示如下:起点 1 1 2 3 4 4 5 5终点 2 3 4 2 3 5 3 4权 8 9 6 4 0 3 6 7为了便于检索,

18、一般按照起点、终点的字典序顺序存储弧表,如上面的弧表就是按照这样的顺序存储的。(iv)邻接表表示法邻接表表示法将图以邻接表(adjacency lists)的形式存储在计算机中。所谓图的邻接表,也就是图的所有节点的邻接表的集合;而对每个节点,它的邻接表就是它的所有出弧。邻接表表示法就是对图的每个节点,用一个单向链表列出从该节点出发的所有弧,链表中每个单元对应于一条出弧。为了记录弧上的权,链表中每个单元除列出弧的另一个端点外,还可以包含弧上的权等作为数据域。图的整个邻接表可以用一个指针数组表示。例如,例 7 所示的图,邻接表表示为-6-这是一个 5 维指针数组,每一维(上面表示法中的每一行)对应

19、于一个节点的邻接表,如第 1 行对应于第 1 个节点的邻接表(即第 1 个节点的所有出弧) 。每个指针单元的第 1 个数据域表示弧的另一个端点(弧的头) ,后面的数据域表示对应弧上的权。如第 1 行中的“2”表示弧的另一个端点为 2(即弧为(1,2) ) , “8”表示对应弧(1,2)上的权为 8;“3”表示弧的另一个端点为 3(即弧为(1,3)) , “9”表示对应弧(1,3)上的权为 9。又如,第 5 行说明节点 5 出发的弧有(5,3)、(5,4),他们对应的权分别为 6和 7。对于有向图 ,一般用 表示节点 的邻接表,即节点 的所有出弧),(AVG)(iii构成的集合或链表(实际上只需

20、要列出弧的另一个端点,即弧的头) 。例如上面例子, 等。这种记法我们在本书后面将会经常用到。3,2)1(A4(v)星形表示法星形(star)表示法的思想与邻接表表示法的思想有一定的相似之处。对每个节点,它也是记录从该节点出发的所有弧,但它不是采用单向链表而是采用一个单一的数组表示。也就是说,在该数组中首先存放从节点 1 出发的所有弧,然后接着存放从节点2 出发的所有孤,依此类推,最后存放从节点 出发的所有孤。对每条弧,要依次存n放其起点、终点、权的数值等有关信息。这实际上相当于对所有弧给出了一个顺序和编号,只是从同一节点出发的弧的顺序可以任意排列。此外,为了能够快速检索从每个节点出发的所有弧,

21、我们一般还用一个数组记录每个节点出发的弧的起始地址(即弧的编号) 。在这种表示法中,可以快速检索从每个节点出发的所有弧,这种星形表示法称为前向星形(forward star)表示法。例如,在例 7 所示的图中,仍然假设弧(1,2) , (l,3 ) , (2,4) , (3,2) , (4,3) ,(4,5) , (5,3)和(5,4)上的权分别为 8,9,6,4,0,3,6 和 7。此时该网络图可以用前向星形表示法表示如下: 节点对应的出弧的起始地址编号数组(记为 )point节点号 i1 2 3 4 5 6起始地址 )(pont1 3 4 6 7 9记录弧信息的数组弧编号 1 2 3 4

22、5 6 7 8起点 1 1 2 3 4 4 5 5终点 2 3 4 2 3 5 3 4权 8 9 6 4 0 3 6 7在数组 中,其元素个数比图的节点数多 1(即 ) ,且一定有point n, 。对于节点 ,其对应的出弧存放在弧信息数组1)(it 1)(mi-7-的位置区间为,1)(),(ipontit如果 ,则节点 没有出弧。这种表示法与弧表表示法也非常相poini似, “记录弧信息的数组”实际上相当于有序存放的“弧表” 。只是在前向星形表示法中,弧被编号后有序存放,并增加一个数组( )记录每个节点出发的弧的起始point编号。前向星形表示法有利于快速检索每个节点的所有出弧,但不能快速检

23、索每个节点的所有入弧。为了能够快速检索每个节点的所有入孤,可以采用反向星形(reverse star)表示法:首先存放进入节点 1 的所有孤,然后接着存放进入节点 2 的所有弧,依此类推,最后存放进入节点 的所有孤。对每条弧,仍然依次存放其起点、终点、权n的数值等有关信息。同样,为了能够快速检索从每个节点的所有入弧,我们一般还用一个数组记录每个节点的入孤的起始地址(即弧的编号) 。例如,例 7 所示的图,可以用反向星形表示法表示为如下形式:节点对应的入弧的起始地址编号数组(记为 )rpoint节点号 i1 2 3 4 5 6起始地址 )(rpont1 1 3 6 8 9记录弧信息的数组弧编号

24、1 2 3 4 5 6 7 8终点 2 2 3 3 3 4 4 5起点 3 1 1 4 5 5 2 4权 4 8 9 0 6 7 6 3如果既希望快速检索每个节点的所有出弧,也希望快速检索每个节点的所有入弧,则可以综合采用前向和反向星形表示法。当然,将孤信息存放两次是没有必要的,可以只用一个数组(trace )记录一条弧在两种表示法中的对应关系即可。例如,可以在采用前向星形表示法的基础上,加上上面介绍的 数组和如下的 数组即可。rpointtrace这相当于一种紧凑的双向星形表示法如下所示:两种表示法中的弧的对应关系(记为 )tace反向法中弧编号 j1 2 3 4 5 6 7 8正向法中弧编

25、号 )(trace4 1 2 5 7 8 3 6对于网络图的表示法,我们作如下说明: 星形表示法和邻接表表示法在实际算法实现中都是经常采用的。星形表示法的优点是占用的存储空间较少,并且对那些不提供指针类型的语言(如 FORTRAN 语言等)也容易实现。邻接表表示法对那些提供指针类型的语言(如 C 语言等)是方便的,且增加或删除一条弧所需的计算工作量很少,而这一操作在星形表示法中所需的计算工作量较大(需要花费 的计算时间) 。有关“计算时间”的观念是网络优化中需)(mO要考虑的一个关键因素。 当网络不是简单图,而是具有平行弧(即多重弧)时,显然此时邻接矩阵表示法是不能采用的。其他方法则可以很方便

26、地推广到可以处理平行弧的情形。 上述方法可以很方便地推广到可以处理无向图的情形,但由于无向图中边没有-8-方向,因此可能需要做一些自然的修改。例如,可以在计算机中只存储邻接矩阵的一半信息(如上三角部分) ,因为此时邻接矩阵是对称矩阵。无向图的关联矩阵只含有元素 0 和 ,而不含有 ,因为此时不区分边的起点和终点。又如,在邻接表和星形11表示法中,每条边会被存储两次,而且反向星形表示显然是没有必要的,等等。2.7 轨与连通,其中 , , , ,kvevW210)(GEiki1)(GVvjkj0与 关联,称 是图 的一条道路(walk) , 为路长,顶点 和 分别称为iei, v的起点和终点,而

27、称为它的内部顶点。12,k若道路 的边互不相同,则 称为迹(trail)。若道路 的顶点互不相同,则WW称为轨(path) 。称一条道路是闭的,如果它有正的长且起点和终点相同。起点和终点重合的轨叫做圈(cycle) 。若图 的两个顶点 间存在道路,则称 和 连通(connected)。 间的最短Gvu,uvvu,轨的长叫做 间的距离。记作 。若图 的任二顶点均连通,则称 是连通, ),(dGG图。显然有:(i) 图 是一条轨的充要条件是 是连通的,且有两个一度的顶点,其余顶点的PP度为 2;(ii) 图 是一个圈的充要条件是 是各顶点的度均为 2 的连通图。CC3 应用最短路问题3.1 两个指

28、定顶点之间的最短路径问题如下:给出了一个连接若干个城镇的铁路网络,在这个网络的两个指定城镇间,找一条最短铁路线。以各城镇为图 的顶点,两城镇间的直通铁路为图 相应两顶点间的边,得图GG。对 的每一边 ,赋以一个实数 直通铁路的长度,称为 的权,得到赋e)(ewe权图 。 的子图的权是指子图的各边的权和。问题就是求赋权图 中指定的两个顶点 间的具最小权的轨。这条轨叫做 间的最短路,它的权叫做 间的0,vu 0,vu0,vu距离,亦记作 。),(0d求最短路已有成熟的算法:迪克斯特拉(Dijkstra)算法,其基本思想是按距 从近到远为顺序,依次求得 到 的各顶点的最短路和距离,直至 (或直至 的

29、所uG0G有顶点) ,算法结束。为避免重复并保留每一步的计算信息,采用了标号算法。下面是该算法。(i) 令 ,对 ,令 , , 。0l0v)(vl0uSi(ii) 对每个 ( ) ,用iSiiV)(,mnuwliu代替 。计算 ,把达到这个最小值的一个顶点记为 ,令vlviS 1i。11iiiS(iii). 若 ,停止;若 ,用 代替 ,转 (ii)。|V1|Viii-9-算法结束时,从 到各顶点 的距离由 的最后一次的标号 给出。在 进入0uv)(vl之前的标号 叫 T 标号, 进入 时的标号 叫 P 标号。算法就是不断修改iS)(vl iS)(vl各项点的 T 标号,直至获得 P 标号。若

30、在算法运行过程中,将每一顶点获得 P 标号所由来的边在图上标明,则算法结束时, 至各项点的最短路也在图上标示出来了。0u例 9 某公司在六个城市 中有分公司,从 到 的直接航程票价记621,c icj在下述矩阵的 位置上。 ( 表示无直接航路) ,请帮助该公司设计一张城市 到),(ji1c其它城市间的票价最便宜的路线图。 052101254250045用矩阵 ( 为顶点个数)存放各边权的邻接矩阵,行向量 、 、na pb1index、 分别用来存放 标号信息、标号顶点顺序、标号顶点索引、最短通路的值。2indexP其中分量;顶 点 未 标 号当 第 顶 点 已 标 号当 第 iipb01)(存

31、放始点到第 点最短通路中第 顶点前一顶点的序号; 2ndex i存放由始点到第 点最短通路的值。)(i求第一个城市到其它城市的最短路径的 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

32、(a);d(1:length(a)=M;d(1)=0;temp=1;while sum(pb)=2-10-index=index(1);endindex2(temp)=index;endd, index1, index2 例、用迪克斯特拉算法求出权图中 u0 到 un 的距离 d(u 0 ,S 2)及最短路 nl解:(1)S 0 = u0,S 0 = u1 ,u 2 ,u 3,u 4 ,u 5 ,u 6 ,u 7,min1,2,4,8,7=1 , (u 0 ,u 1 )=1, 1 =(u 0 ,u 1 ) ,| 1|=1.dll(2)S 1 =u0 , u1,S 1 =u2 ,u 3 ,u 4

33、 ,u 5 ,u 6 ,u 7,min2,4,8,7,1+2,1+3,1+,1+,1+7,1+=2, (u 0 ,u 2 )=2, 2=(u 0 ,u 2 ) ,| 2|=2.dll(3)S 2 = u0 ,u 1 ,u 2, S2 = u3 ,u 4 ,u 5 ,u 6 ,u 7,min, ,4,8,7,1+3,1+,1+,1+7,1+,2+1,2+,2+,2+,2+5=3, (u 0 ,u 3)=3, 3 =(u 0 ,u 2 , u3) ,| 3|=3.dll(4) S3 = u0 , u1 ,u 2 , u3, S3 = u4 ,u 5 ,u 6 ,u 7,min, 4,8,7,1+,

34、1+,1+,1+5,2+,2+,2+,2+5,3+6,3+,3+,3+3=4, (u 0 ,u 5)=4, 4=(u 0 ,u 5 ) ,| 4|=4.dll(5) S4 = u0 , u1 ,u 2 , u3 , u5, S5 = u4 , u6 , u7,min,8,7,1+,1+7,1+,2+,2+,2+5,3+6,3+,3+3,4+6,4+2,4+3=-11-6, (u 0 ,u 7)=6, 5=(u 0 ,u2 ,u 3 ,u 7) ,| 5|=6.dl l(6) S5 = u0 , u1 ,u 2 , u3 , u5, u7, S5 = u4 , u6 ,min,8,1+,1+7,

35、 2+,2+, 3+6,3+, 4+6,4+2,6+4,6+=6, (u 0 ,u 6)=6, 6=(u 0 ,u5, u6) ,| 6|=6.dll(7) 6123574,SSmin,904702347(,)9,(|dulul故从 到其余各点的最短距离分别为:1012023023(,)(,)(,),lll45765670234(,)uuuluMATLAB 函 数function l,z=Dijkstra(W)n = size (W,1);for i = 1 :n l(i)=W(1,i);z(i)=1;end i=1;while il(j)+W(j,i)l(i)=l(j)+W(j,i);z(i

36、)=j;if j/以下是扩充红点集for(i=0;iDk+Gkj)/新红点 k 使原 Dj值变小时,用新路径的长度修改 Dj,/使 j 离 s 更近。Dj=Dk+Gkj;3.2 每对顶点之间的最短路径计算赋权图中各对顶点之间最短路径,显然可以调用 Dijkstra 算法。具体方法是:每次以不同的顶点作为起点,用 Dijkstra 算法求出从该起点到其余顶点的最短路径,反复执行 次这样的操作,就可得到从每一个顶点到其它顶点的最短路径。这种算法n的时间复杂度为 。第二种解决这一问题的方法是由 Floyd. R.W 提出的算法,称)(3O之为 Floyd 算法。假设图 权的邻接矩阵为 ,G0Annn

37、aaA 2121120来存放各边长度,其中:;ii,之间没有边,在程序中以各边都不可能达到的充分大的数代替;jj,是 之间边的长度, 。ijiwaij nji,21,对于无向图, 是对称矩阵, 。0AjiijaFloyd 算法的基本思想是:递推产生一个矩阵序列 ,其中nkAA,10-13-表示从顶点 到顶点 的路径上所经过的顶点序号不大于 的最短路径长度。),(jiAkivj k计算时用迭代公式: ),(),(),(min),( 111 jkAijiAjikkk 是迭代次数, 。2最后,当 时, 即是各顶点之间的最短通路值。例10 用Floyd算法求解例1。矩阵path 用来存放每对顶点之间最

38、短路径上所经过的顶点的序号。Floyd算法的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);b=a+a;path=zeros(length(b);for k=1:6for i=1:6for j=1:6if b(i,j)b(i,k)+b(k,j)b(i,j)=b(i,k)+b(k,j);path(i,j)=k

39、;endendendendb, path4 树4.1 基本概念连通的无圈图叫做树,记之为 。若图 满足 , ,TG)(TV)(GE则称 是 的生成树。图 连通的充分必要条件为 有生成树。一个连通图的生成TG树的个数很多,用 表示 的生成树的个数,则有公式)(公式 (Caylay) 。2nK公式 。)(e其中 表示从 上删除边 , 表示把 的长度收缩为零得到的图。e树有下面常用的五个充要条件。定理 1 (i) 是树当且仅当 中任二顶点之间有且仅有一条轨道。G(ii) 是树当且仅当 无圈,且 。1(iii ) 是树当且仅当 连通,且 。(iv) 是树当且仅当 连通,且 , 不连通。)(GEee-1

40、4-(v) 是树当且仅当 无圈, , 恰有一个圈。G)(GEee4.2 应用连线问题欲修筑连接 个城市的铁路,已知 城与 城之间的铁路造价为 ,设计一个线nij ijC路图,使总造价最低。连线问题的数学模型是在连通赋权图上求权最小的生成树。赋权图的具有最小权的生成树叫做最小生成树。下面介绍构造最小生成树的两种常用算法。4.2.1 prim 算法构造最小生成树设置两个集合 和 ,其中 用于存放 的最小生成树中的顶点,集合 存放PQGQ的最小生成树中的边。令集合 的初值为 (假设构造最小生成树时,从顶G1vP点 出发) ,集合 的初值为 。prim 算法的思想是,从所有 ,1vPp的边中,选取具有

41、最小权值的边 ,将顶点 加入集合 中,将边 加Vpv入集合 中,如此不断重复,直到 时,最小生成树构造完毕,这时集合 中包V含了最小生成树的所有边。prim 算法如下:(i) , ;1vPQ(ii)while V,min(Pvpwpvend例 11 用 prim 算法求右图的最小生成树。我们用 的第一、二、三行分别表示生成树边的起点、终点、权集合。nresult3Matlab 程序如下:clc;clear;M=1000;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、)=42;a(5,6)=70; a=a;zeros(2,7);a=a+a;a(find(a=0)=M;result=;p=1;tb=2:length(a);while length(result)=length(a)-1temp=a(p,tb);temp=temp(:);d=min(temp);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-15-4.2.2 Kruskal 算法构造最小生成树科茹斯克尔(Kruskal)算法是一个好算法。Kruskal 算

43、法如下:(i)选 ,使得 。)(1GEemin)(1ew(ii)若 已选好,则从 中选取 ,使得i,2 ,21ieGE1i 中无圈,且 。n1iw(iii)直到选得 为止。e例 12 用 Kruskal 算法构造例 3 的最小生成树。我们用 存放各边端点的信息,当选中某一边之后,就将此边对应的顶点nidx2序号中较大序号 改记为此边的另一序号 ,同时把后面边中所有序号为 的改记为uvu。此方法的几何意义是:将序号 的这个顶点收缩到 顶点, 顶点不复存在。后vuv面继续寻查时,发现某边的两个顶点序号相同时,认为已被收缩掉,失去了被选取的资格。Matlab 程序如下:clc;clear;M=100

44、0;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=find(a=0)b=a(find(a=0)data=i;j;b;index=data(1:2,:);loop=max(size(a)-1;result=;while length(result)v2index(find(index=v1)=v2;elseindex(find(index=v2)=v1;enddata(:,flag)=;index(:,flag)=;endres

45、ult5 匹配问题-16-定义 若 , , 与 无公共端点( ) ,则称 为)(GEMMeji,ijejiM图 的一个对集; 中的一条边的两个端点叫做在对集 中相配; 中的端点称G为被 许配; 中每个顶点皆被 许配时, 称为完美对集; 中已无使G的对集 ,则 称为最大对集;若 中有一轨,其边交替地在对集|内外出现,则称此轨为 的交错轨,交错轨的起止顶点都未被许配时,此交错轨称为可增广轨。若把可增广轨上在 外的边纳入对集,把 内的边从对集中删除,则被许配的顶点数增加 2,对集中的“对儿”增加一个。1957 年,贝尔热(Berge) 得到最大对集的充要条件:定理 2 是图 中的最大对集当且仅当 中

46、无 可增广轨。MGGM1935 年,霍尔(Hall)得到下面的许配定理:定理 3 为二分图, 与 是顶点集的划分, 中存在把 中顶点皆许配的XYX对集的充要条件是, ,则 ,其中 是 中顶点的邻集。S|)(|SN)(NS由上述定理可以得出:推论 1:若 是 ( 正则 2 分图,则 有完美对集。k)0所谓 正则图,即每顶点皆 度的图。由此推论得出下面的婚配定理:定理 4 每个姑娘都结识 位小伙子,每个小伙子都结识 位姑娘,则每)1(kk位姑娘都能和她认识的一个小伙子结婚,并且每位小伙子也能和他认识的一个姑娘结婚。人员分派问题等实际问题可以化成对集来解决。人员分派问题:工作人员 去做 件工作 ,每

47、人适合做nx,21 ny,21其中一件或几件,问能否每人都有一份适合的工作?如果不能,最多几人可以有适合的工作?这个问题的数学模型是: 是二分图,顶点集划分为 ,GYXGV)(, ,当且仅当 适合做工作 时, ,,1nxX,1nyYixiy)(Exi求 中的最大对集。G解决这个问题可以利用 1965 年埃德门兹(Edmonds)提出的匈牙利算法。匈牙利算法:(i)从 中任意取定一个初始对集 。M(ii)若 把 中的顶点皆许配,停止, 即完美对集;否则取 中未被MX X许配的一顶点 ,记 , 。uST(iii )若 ,停止,无完美对集;否则取 。N)( TSNy)((iv)若 是被 许配的,设

48、, , ,转(iii) ;yyzzSy否则,取可增广轨 ,令 ,转(ii) 。,P)(PE把以上算法稍加修改就能够用来求二分图的最大对集。最优分派问题:在人员分派问题中,工作人员适合做的各项工作当中,效益未必一致,我们需要制定一个分派方案,使公司总效益最大。这个问题的数学模型是:在人员分派问题的模型中,图 的每边加了权G,表示 干 工作的效益,求加权图 上的权最大的完美对集。0)(jiyxwixjy-17-解决这个问题可以用库恩曼克莱斯(Kuhn-Munkres)算法。为此,我们要引入可行顶点标号与相等子图的概念。定义 若映射 ,满足 ,RGVl)(: YyXx,,,ywx则称 是二分图 的可行顶点标号。令l,)()(,|lEyl 称以 为边集的 的生成子图为相等子图,记作 。lElG可行顶点标号是存在的。例如;),(max)(XylYy。

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报