第6章图与网络分析GraphandNetworkAnalysis•图是一种模型,如公路铁路交通图,水或煤气管网图,通讯联络图等。•图是对现实的抽象,用点和线的连接组合表示。§6.1图的基本概念和模型•图不同于几何图形。一、基本概念1、图(graph):由V,E构成的有序二元组,用以表示对某些现实对象及其联系的抽象,记作G={V,E}。其中V称为点集,记做V={v1,v2,···,vn}E称为边集,记做E={e1,e2,···,em}点(vertex):表示所研究的对象,用v表示;边(edge):表示对象之间的联系,用e表示。网络图(赋权图):点或边具有实际意义(权数)的图,记做N。零图:边集为空集的图。v1v2v3v4v5e1e2e3e4e5e6e7e8特别的,若边e的两个端点重合,则称e为环。若两个端点之间多于一条边,则称为多重边。2、图的阶:即图中的点数。例如右图为一个五阶图3、若图中边e=[vi,vj],则vi,vj称为e的端点,e称为vi,vj的关联边。若vi与vj是一条边的两个端点,则称vi与vj相邻;若边ei与ej有公共的端点,则称ei与ej相邻。简单图:无环、无多重边的图。例如:e6=[v2,v3]4、点v的次(或度,degree)与点v关联的边的条数,记为dG(v)或d(v)。v1v2v3v4e1e2e3e4e5e6e7v5•悬挂点次为1的点,如v5•悬挂边悬挂点的关联边,如e8e8•孤立点次为0的点•偶点次为偶数的点,如v2•奇点次为奇数的点,如v55、链:图中保持关联关系的点和边的交替序列,其中点可重复,但边不能重复。路:点不能重复的链。圈:起点和终点重合的链。回路:起点和终点重合的路。连通图:任意两点之间至少存在一条链的图。完全图:任意两点之间都有边相连的简单图。n阶完全图用Kn表示,边数=2(1)2nnnC注意:完全图是连通图,但连通图不一定是完全图。v1v2v5v6v7v3v4e1e2e4e3e5e6e7e8e9如图(v1,e1,v2,e2,v3,e3,v4,e5,v5,e6,v3,e7,v6,e8,v7)是一条链,但不是路(v1,e1,v2,e2,v3,e7,v6,e8,v7)是一条路(v1,e1,v2,e2,v3,e3,v4,e4,v1)是一个回路(v4,e4,v1,e1,v2,e2,v3,e6,v5,e9,v7,e8,v6,e7,v3,e3,v4)是一个圈本图是一个连通图。7、已知图G1={V1,E1},G2={V2,E2},若有V1V2,E1E2,则称G1是G2的一个子图;若V1=V2,E1E2且E1≠E2,则称G1是G2的一个部分图。6、偶图(二分图):若图G的点集V可以分为两个互不相交的非空子集V1和V2,而且在同一个子集中的点均互不相邻,则图G称为偶图。完全偶图:V1中的每个点均和V2中的每个点相邻的偶图。若完全偶图中V1有m个点,V2有n个点,则该图共有mn条边。注意:部分图是子图,子图不一定是部分图。*例有甲、乙、丙、丁、戊、己六名运动员报名参加A、B、C、D、E、F六个项目的比赛。如表中所示,打“√”的项目是各运动员报名参加比赛的项目。问:六个项目的比赛顺序应如何安排,才能做到使每名运动员不连续地参加两项比赛?甲乙丙丁戊己人ABCDEF√√√√√√√√√√√√√√√√解:构造一个六阶图如下:点:表示运动项目。边:若两个项目之间有同一名运动员报名参加,则对应的两个点之间连一条边。ABCDEFA—C—B—F—E—D为满足题目要求,应该选择不相邻的点来安排比赛的顺序:或D—E—F—B—C—A*1、树(tree):无圈的连通图称为树图,简称为树,用T(V,E)或T表示。一、树图的概念2、树的性质(1)树中必有悬挂点。证明(反证法):设树中任何点的次均不为1.因为树无孤立点,所以树的点的次≥2.不妨设树有n个点,记为v1,v2,…,vn因为d(v1)≥2,不妨设v1与v2,v3相邻。又因为树没有圈,且d(v2)≥2,可设v2与v4相邻,…,依次下去,vn必然与前面的某个点相邻,图中有圈,矛盾!注意:树去掉悬挂点和悬挂边后余下的子图还是树。(2)n阶树必有n-1条边。证明(归纳法):当n=2时,显然;设n=k-1时结论成立。当n=k时,树至少有一个悬挂点。去掉该悬挂点和悬挂边,得到一个k-1阶的树,它有k-2条边,则原k阶树有k-1条边。即n=k时结论也成立。综上,n阶树有n-1条边。(3)任何有n个点、n-1条边的连通图是树。证明(反证法):假设n个点,n-1条边的连通图中有圈,则在该圈中去掉一条边得到的子图仍连通,若子图仍有圈,则继续在相应圈中去掉一条边,…,直到得到无圈的连通图,即为树。但是该树有n个点,边数少于n-1,矛盾!注意:①树是边数最多的无圈图。②树是边数最少的连通图。在树中不相邻的两个点之间添上一条边,则恰得到一个圈。从树中去掉一条边,则余下的图不连通。3、图的最小部分树(1)部分树:若G1是G2的一个部分图,且G1为树,则称G1是G2的一个部分树(或支撑树)。G2:ABCD547365576G1:ACBD注意:图G有部分树的必要条件是G是连通图。部分树不是唯一的。(2)最小部分树(或最小支撑树)图G为网络图,若T是部分树中权和最小者,则称T是G的最小部分树(或称最小支撑树).二、最小部分树的求法1、原理(1)图中与点v关联的最短边(即权最小的边)一定包含在最小部分树中。(2)将图中的点分成两个互不相交的非空子集,则两个子集之间连线的最短边一定包含在最小部分树中。SABCDET5455即求图中的最小部分树例:要在下图所示的各个位置之间建立起通信网络,试确定使总距离最佳的方案。2、求法方法一:避圈法将图中所有的点分V为V两部分,V——最小部分树中的点的集合V——非最小部分树中的点的集合⑴任取一点vi加粗,令vi∈V,其他点在V中⑵在V与V相连的边中取一条最短的边(vi,vj),加粗(vi,vj),令vj∈V,并在V中去掉vj⑶重复⑵,至所有的点均在V之内。“取小边”SABCDET5455最小部分树长Lmin=14例:要在下图所示的各个位置之间建立起通信网络,试确定使总距离最佳的方案。SABCDET5455×××最小部分树长Lmin=14方法二:破圈法⑴任取一圈,去掉其中一条最长边;⑵在余下的图中重复(1),直至图中没有任何圈为止。“去大边”*1、最短路问题从已知的网络图中找出两点之间距离最短(即权和最小)的路。2、相关记号(1)dij表示图中两个相邻点i和j之间的距离(即权)。易见dii=0约定:当i和j不相邻时,dij=∞(2)Lij表示图中点i和j之间的最短距离(即最小权和)。易见Lii=0即在已知的网络图中,从给定点s出发,要到达目的地t。问:选择怎样的行走路线,可使总行程最短?3、狄克斯屈拉(Dijkstra)标号算法(1)适用范围用于求某两个点之间的最短距离。(2)原理最短路上任何片段是最短路。v1v2v3v4v5(3)思想按离出发点s的距离由近至远逐步标出最短距离Lsi以及最佳行进路线。SABCDET54555例求图中S到T的最短路及最短距离。(4)步骤在网络图中求s到t的最短路。第一步从s出发,将Lss=0标记在s旁边的方框内(表示点s已标记);第二步找出与s相邻且距离最小的点,设为r,计算Lsr=Lss+dsr,并将结果标记在r旁边的方框内(表示点r已标记),同时标记边sr;第三步从已标记的点出发,找出这些点的所有未标记邻点,分别计算已标记点的方框数与其邻点的距离之和,利用“叠加最小”的原则确定下一个被标记点,设为p,并将最小的和标记在p旁边的方框内(表示点p已标记),同时标记相应边;第四步重复第三步,直到t得到标记为止。SABCDET545502447891413594最短路:SABEDT最短距离:LST=13例求图中S到T的最短路及最短距离。V1V2V3V4V5V6V752276742136例求图中v1到v7的最短路。05277610例求图中任意两点之间的最短距离。V1V2V3V4V6V752276742136*v1v2v3v4v5v6v7V1052∞∞∞∞V250∞27∞∞V32∞07∞4∞V4∞27062∞V5∞7∞6013V6∞∞42106v7∞∞∞∞360⑴构造任意两点间直接到达的最短距离矩阵记做D(0)=dij(0)其中dij(0)=dij注意:D(0)是一个对称矩阵,且对角线上的元素全是0.D(0)=其中dij(1)=min{dir(0)+drj(0)}irjdir(0)drj(0)r⑵构造任意两点间直接到达、或者最多经过1个中间点到达的最短距离矩阵D(1)=dij(1)即dij(1)为D(0)中第i行和第j行对应元素之和的最小值D(1)=v1v2v3v4v5v6v7V10527126∞V250727410V327065410V47260328V512753013V66442104v7∞10108340其中dij(2)=min{dir(1)+drj(1)}irjdir(1)drj(1)r⑶构造任意两点间最多可经过3个中间点到达的最短距离矩阵D(2)=dij(2)即dij(2)为D(1)中第i行和第j行对应元素之和的最小值D(2)=v1v2v3v4v5v6v7V105277610V25072548V32706548V47260326V57553013V66442104v710886340其中dij(3)=min{dir(2)+drj(2)}irjdir(2)drj(2)r⑷构造任意两点间最多可经过7个中间点到达的最短距离矩阵D(3)=dij(3)即dij(3)为D(2)中第i行和第j行对应元素之和的最小值D(3)=v1v2v3v4v5v6v7V105277610V25072548V32706548V47260326V57553013V66442104v710886340=D(2)故D(2)中的元素就是图中相应两点之间的最短距离。说明:一般的对于D(k)=dij(k),其中dij(k)=min{dir(k-1)+drj(k-1)},(k=0,1,2,3,…)最多可经过2k-1个中间点收敛条件:①当D(k+1)=D(k)时,计算结束;②设网络图有p个点,即最多有p-2个中间点,则2k-1-1p-22k-1k-1log2(p-1)k∴klog2(p-1)+1,即计算到k=lg(p-1)/lg2+1时,计算结束。注意狄克斯屈拉算法矩阵算法优点既可以求两点之间的最短距离,又可以确定最短路求任意两点之间的最短距离缺点求某两点之间的最短距离不能确定相应两点之间的最短路例:下图中v1—v7表示7个村子,需要联合建立一所小学,已知各村小学生的人数分别为v1—30人,v2—40人,v3—25人,v4—20人,v5—50人,v6—60人,v7—60人。问:学校应建在哪一个村子,可使学生总行程最少?V1V2V3V4V6V752276742136v1v2v3v4v5v6v7V105277610V25072548V32706548V47260326V57553013V66442104v710886340解:用矩阵算法得到任意两个村子之间的最短距离如下:先将每一行的元素乘以该村子的学生人数,得到小学建在相应村子时,该村学生上学时单程所走的路程。再将每一列的元素累加,得到小学建在相应村子时,七个村子的学生上学时单程所走的总路程。小学建在下列村子时,七个村子的学生上学时单程所走的路程v1v2v3v4v5v6v701506021021018030020002808020016032050175015012510020014040120060401203502502501500501503602402401206002406004804803601802400总路程17001335143010708357701330故小学应该建在v6村。v1Sv2v3v4T§6.4网络的最大流v1Sv2v3v4T一、基本概念