图论.docx
- 文档编号:12015201
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:21
- 大小:196.96KB
图论.docx
《图论.docx》由会员分享,可在线阅读,更多相关《图论.docx(21页珍藏版)》请在冰豆网上搜索。
图论
图论模型的建立与转化
安徽徐静
关键字:
图论模型、建立、转化
摘要
本文主要写图论模型的建立与转化,共分四部分:
第一部分引言说明了图论建模在整个信息学竞赛中的地位,以及图论模型与其它数学模型的异同,并指出很有研究总结图论建模的思想、方法及技巧的必要。
第二部分提出了图论模型建立中的两个要点:
对原型中的要素进行适当的取舍和选择合适的理论体系,并分别举例加以详细分析,然后从中总结出了图论建模的总的原则:
准确、清晰、简明。
第三部分主要讨论了在图论模型的转化中,应用得较为广泛的两种方法:
拆分转化和补集转化,并着重分析了前者。
文中把前者分为三类:
点边、点点、边边,其中详细分析了第二类。
第四部分总结了全文,并指出了进一步研究图论模型的必要性。
目录
一.一.引言……………………………………………………………2
二.二.图论模型的建立………………………………………………2
I.I.要素的取舍……………………………………………………2
II.II. 选择合适的理论体系…………………………………………4
三.三.图论模型的转化………………………………………………7
I.I.拆分转化…………………………………………………………7
II.II. 补集转化………………………………………………………10
四.四.结语……………………………………………………………11
正文
一.一. 引言
信息学竞赛以解题为主,整个解题过程中一个重要的步骤就是数学建模,本文要讨论的就是数学建模的一个分支——图论建模。
图论建模是指对一些客观事物进行抽象、化简,并用图[1]来描述事物特征及内在联系的过程。
建立图论模型的目的和建立其它的数学模型一样,都是为了简化问题,突出要点,以便更深入地研究问题的本质;它的求解目标可以是最优化问题,也可以是存在性或是构造性问题;并且,和几何模型、运筹学模型一样,在建立图论模型的过程中,也需要用到集合、映射、函数等基本的数学概念和工具;
但图论模型和其它模型在它们的研究方法上又有着很大的不同,例如我们可以运用典型的图论算法来对图论模型进行求解,或是根据图论的基本理论来分析图论模型的性质,这些特殊的算法和理论都是其它模型所不具备的,而且在其它模型中,能用类似于图这种直观的结构来描述的也很少。
我们学习图论,一般都是通过书籍,但书上介绍的往往只限于图论模型的基本要素、一些图论的相关理论和经典算法等,至于如何建立图论模型、如何运用这些理论和算法、如何研究图论问题,都只有靠自己来理解、来领会,并通过实践来验证这些理解,通过摸索总结来提高自己的能力。
在建立图论模型的过程中,我们常常会遇到一些困难,例如难以建立点、边、权关系,或是原型中的一些重要因素无法纳入现有模型,或是现有模型虽能表示原型,却无法求解等等。
为了克服这些困难,就需要用到某些独特的思想、方法和技巧,本文要写的正是我在学习、实践中得出的这方面的一点认识。
二.二. 图论模型的建立
在建立模型之前,我们首先要对研究对象进行全面的调查,将原型理想化、简单化(对于竞赛题而言,这一步大部分已经由出题人完成了);然后对原型进行初步的分析,分清其中的各个要素及求解目标,理出它们之间的联系;下一步就是用恰当的模型来描述这些要素及联系。
I.I.要素的取舍
在用图论模型描述研究对象时,为了更突出与求解目标息息相关的要素,降低思考的复杂度,就不可避免地要舍去部分要素。
下面我们就通过例1来分析一下。
【例1】【例1】 导线排布Line[7]:
题目(文档附件:
导线排布.doc)中蓝色的一段是问题描述的重点,其中涉及的要素有圆圈、N根导线、2N个端点、编号规则、导线的交叉等,求解目标是构造一种符合所给的导线交叉情况的导线排布方案。
起先,我们对题目描述的导线排布并不熟悉,或许我们能够画出几个无解或是多解的例子,但竞赛时我们不可能花更多的时间在熟悉题目上了,这时只有尽快地把我们不熟悉的、难于思考的原型转化成我们熟知的、便于思考的模型。
先来分析求解目标:
所谓的构造导线排布方案,也就是找出每根导线两个端点的编号;而编号要满足的条件就是导线交叉的情况。
那么下一步我们就来分析一下编号与导线交叉之间的关系。
记第i根导线两端点的标号为Ai和Bi(Ai
显然,这是一种偏序关系(有点不确切,它只满足反对称和传递性,但不是自反的),而我们的任务就是根据这种偏序关系求得全序关系,即拓扑排序。
我们用图中的有向边来表示偏序关系,若有向边构成环,则问题无解。
以上三种情况对应的有向图如图二所示,若两导线交叉,则如(a);若不交叉,则必是(b)、(c)其中之一,至于选择哪一个,就要看它们中哪一个不会导致无解。
若(b)无解,就表示图中除了B1A2这条边之外,还存在着一条A2B1的路径,可能的两种情况如图三
(1)
(2)中红色有向边所示:
(1)表示有编号大于2的导线(
(1)中的导线3)与导线1交叉;
(2)表示虽然它们都不与导线1交叉,但其中有选择图二(c)表示的。
显然,如果情况
(1)出现,那么选择(b)必然无解;但如果
(1)不出现,那么
(2)就可以改成图三(3)(即改用(b)表示导线1、3不交叉,而不是用(c)),这样就有解了。
也就是说,如果导线i与导线j(i 类似的,我们可以分析出: 如果导线i和j(i 图四 (1)画出了(c)无解的情况,此时导线1与3不交叉,m=3,L=(1,2,3);图四 (2) 表示导线1与3不交叉,导线1与2,2与3,1与4交叉,此时用(b)或(c)表示导线1与3不交叉都无解,所以整个问题无解。 分析到这里,图论模型和算法实际上已经出来,具体的实现就不多说了。 上面的分析看似冗长,但实际上,分析的过程如行云流水,十分自然,究其原因,就是我们舍去了原型中一些与求解目标无关的因素,而仅用一个有向图来表示交叉关系。 比起紧紧抱住圆圈、导线这些细节不放,直接分析原型的方法来,分析模型的思维复杂度自然要小得多。 在建模过程中,忽略掉原型中与求解目标关系不大的要素,能够适当地简化问题。 但事物都是一分为二的,如果简化得过了度,反而会使模型变得不够准确,甚至是不正确的,因此,只有在“简明”和“准确”之间找到平衡点,才能建立起具有最佳效果的模型。 II.II. 选择合适的理论体系 图由点、边、权三部分组成,根据这三部分的性质的不同,就有着不同的图论模型,有着不同的理论和算法,也就构成了不同的理论体系。 例如二部图把整个点集V分为两个子集,规定子集内部的点之间没有边,因此二部图就有着不同于一般图的特殊性质,而它的匹配算法也就比一般图的算法简单;此外还有树、有向无环图等,它们属于不同的理论体系,有着各自不同的性质,适于用不同的算法求解。 而权的加入则使图论模型和求解目标变得更加复杂多样了。 有的权表示长度或是时间等等,它们的运算特征是“串联求和,并联求最值”,即一条路径的权由这条路径上每条边的权相加得到,求解目标往往是求图中或是两点之间所有路径的权的最优值。 有的权则表示容量或是流量,它们的运算特征是“串联求最值,并联求和”,即一条路径上最大或是最小的权决定了整条路径的权,而求解目标则是求图中或是两点之间所有路径的权的加和。 以上只是基本的几类权,它们还会产生一些变形,例如权的运算由简单的相加、求最值扩展到相乘,或是更复杂的函数计算等等。 还有的图不仅包含边权(边集E到实数集R的映射),还包含点权(点集V到实数集R的映射);或是包含好几类不同性质的权。 以上这些差异形成了图论模型的多样化,使图论模型可以广泛地适应各类问题,但这些丰富的选择同时也增加了图论建模的难度。 对于有些题目,我们可能很自然地就联想到某种图论模型,例如看到表达式,就会联想起表达式树;但对于另一些题目,分析的角度不同,就会得出不同的模型,产生不同的效果。 【例2】【例2】 奶牛排队CowsonParade(文档附件: Finals95.htm)(USACO'95决赛): [问题简述]: 求一个长度为2n+n-1的01序列,要求序列中包含所有长度为n的01排列(共 个2n)。 当n=3时,序列如左图所示。 与此类似的还有“鼓轮设计”一题(见参考书籍[9]P95),不同的是前者要求排成一线,而后者要求排成一圈,显然,只要后者解决了,前者也就解决了。 所以这里也以排成一圈为求解目标。 [模型A] 如果以每个长度为n的01排列为点,以它们之间的重叠关系为边,就构成了一个有向图(如图五所示)。 求解目标就是在这个图上找一个回路(图中蓝色部分),使得通过每点一次且仅一次——Hamilton回路问题。 [模型B] 10 0 0 如果以01排列之间的重叠部分为点,以01排列为边,就构成了一个如图六所示的有向图,求解目标就是在这个图上找一个回路,使得不重复地遍历每条边——Euler回路问题。 从图六中不难看出,图上每点都是连通的,而且入度和出度都等于2,因此图中存在Euler回路,也并不难求(算法及相关理论见参考书籍[6]P152或[8]P246或[9]P95)。 相较之下,Hamilton回路问题是NP完全问题,也就是说,模型A的建立并没有给问题的解决带来任何便利。 由此可见,不同理论体系的图论模型很可能会产生完全不同的效果。 例2中不同模型的建立是由于分析角度的不同,而在下面的例3中,则是因为对原型的分析深浅不同的缘故。 【例3】【例3】 最少路径覆盖(题目见参考书籍[1]P274或[3]P429): 有向无环图G(V,E)的一个路径覆盖是指一个路径集合P,满足图中的每点属于且仅属于集合中的一条路径。 求一个包含路径数最少的路径覆盖(如图七所示)。 [解法A][解法A] 网络流模型(见图八): 1.1.把点i(iV)拆成两点i'和i'',添加弧(即有向边)(i',i''),容量上界Ci',i''=1,下界Bi',i''=1; 2.2.加源点s和汇点t,添加弧(s,i')和(i'',t),Cs,i'=Ci'',t=+,Bs,i'=Bi'',t=0; 3.3.把边集E中的弧(i,j)改为弧(i'',j'),Ci'',j'=+,Bi'',j'=0。 建立了新图G'之后,原图G中的一条路径就相当与G'中的一条流路径。 因为我们规定G'中Ci',i''=Bi',i''=1,所以原图G中的点i属于且仅属于一条路径,因此G中包含路径最少的一个路径覆盖方案就相当于G'中的一个最小流方案。 [解法B][解法B]二部图模型 设路径覆盖P={P1,P2,……,Pp-1,Pp},Pi(1ip)表示集合P中的一条路径;记Vi=Pi∩V,Ei=Pi∩E,即Vi为Pi中的点,Ei为Pi中的边,显然Vi=Ei+1。 例如在图七中,第①种方案为P={1345,2},其中P1=1345,所以V1={1,3,4,5},E1={(1,3),(3,4),(4,5)}。 因为P是一个路径覆盖,所以V1∪V2∪……∪Vp-1∪Vp=V,且Vi∩Vj=Ø(1i,jp,ij)。 这些条件加上一点集合方面的知识,我们不难有以下的推导: 又∵Ei∩Ej=Ø(1i,jp,ij), ∴ , 记M= ,则M需要满足“V中的每一点最多只与M中的两条弧相连: 一条入弧和一条出弧”,并且只要M满足这个条件,它与路径覆盖就是一一对应的。 有了以上的分析之后,我们就可以建立起一个二部图模型(见图九)了: 1.1.把点i(iV)拆成两点i'和i''; 2.2.把边集E中的弧(i,j)改为无向边(i'',j')。 在新图G'中,点i'为入点,原图G中所有以点i为弧头的弧都改成了与i'相连的无向边;同样的,点i''为出点,G中所有以点i为弧尾的弧都改成了与i''相连的无向边。 这时,原图G上的M就相当于二部图G'上的一个匹配。 上面我们已经分析出M与P是一一对应的,且P=V-M,而V又是定值,所以只要求出二部图G'上的最大匹配,也就求得原图G的最小路径覆盖了。 比较上面两个解法的时空效率和编程复杂度,不难看出解法B要明显优于解法A。 这是因为解法B对原型进行更深入的分析,只抽取了原型中较关键的要素来建立模型,所以求解起来更为简单、方便。 另外值得注意的一点是: 解法A中用到了网络流算法。 由于这类算法一般编程复杂度大,易错,而且算法的系数较大,所以它在竞赛中的表现往往不十分出色。 但是网络流模型可以容纳的要素很多,特别是权的类型众多: 不仅有表示容量和流量的权,还有表示费用的权;容量不仅有上界,还可以有下界……有了这些多变的因素,再加上网络流算法一般都属有效算法,所以网络流模型在现实问题的解决和图论问题的研究中有着十分广泛的应用。 在下面的例题中,也还有不少用到了网络流模型。 从上面的例子中,我们已经了解到了选择合适的理论体系的重要性。 有时,可能会有多个看似都正确的模型可供选择,只有仔细分辨出它们之间细微但又关键的差别,才能够选出适于求解的模型。 这就要求我们既要熟悉图论的算法和理论,也要对原型有着清楚的认识。 无论是要决定要素的取舍,还是面对着不同理论体系的选择,总的原则都是: 准确、清晰、简明。 “准确”: 指模型应当忠于原型,不可扭曲原型本来的性质,也不可默认原型具有一些假设的、未经证明的性质; “清晰”: 就像程序具有可读性一样,图论模型也具有清晰度,以结构清晰的模型为分析对象,思考复杂度就会降低很多; “简明”: 指模型中含有的要素简单明了,不繁杂,模型也是便于分析求解的,有这一要求主要是因为图论中很多算法和理论都相当高深和复杂,很难运用和变通,因此尽量不要采用。 三.三. 图论模型的转化 在建立图论模型解决问题时,我们往往会遇到这样的情况: 在很轻松地建立起一个模型之后,却不知该如何分析,求解,或是发现建立起的模型无法表现原型的一个很重要的性质。 这时,我们必须要放弃现有的模型吗? 不,如果运用一些方法和技巧的话,现有的模型很可能就会转化为能够准确描述原型,而又易于求解的新模型。 在这些方法和技巧中,有一些只适用于特定的图论模型,例如把多叉树转化为二叉树(见图十)处理的技巧。 此外,还有另一些作用范围更广的方法和技巧,下面将讨论的“拆分转化”就是其中之一。 “拆分转化”可分为三类: 点边、点点、边边。 其中第一类很常用,但拆法较简单;第二类不仅常用,而且灵活多变;第三类的拆法和作用则与第二类很相似。 所以下面将详述第二类,简述第一、三类。 1.1. 点边: “拆点为边”是“拆分转化”中十分常用的一类,当要求现有模型中的点具有边的性质时,“拆点为边”就是一个好办法。 在例3中建立模型A时,我们把每个点拆成了一条有上下界容量的边,以满足“每个点经过且只经过一次”的要求。 另外,我们在求解点有容量的网络流时,为了得到标准的网络流模型,往往也把点拆成边,把点上的容量限制转移到对应的边上。 在实际应用中,“拆点为边”的例子很多,“拆法”也大同小异: 把每点i拆成两个点i'和i'';以i为弧头的弧都改为以i'为弧头,以i为弧尾的弧都改为以i''为弧尾(这些弧上的权以及原有属性是保留还是更改,则视情况而定);并且添加一条i'指向i''的弧,把点i具有的属性赋给这条弧(参见图十一,其中蓝色的弧为添加的弧)。 2.2. 点点: 这是“拆分转化”的第2类: 把一个点拆成若干个点。 它主要用于把一个点拥有的好几个不同的性质分离开,分别赋给几个新的点,使每个点的性质单一,再通过一些改造来统一处理它们。 例如在例3中建立模型B时,为了表示任意一点i最多允许与一条入弧和一条出弧相连,我们把i拆成了一个入点i'和一个出点i'',并且通过把所有的入弧都连到i'上,所有的出弧都连到i''上的措施,使每点都只与一条边相连,这样,用匹配算法就可以统一处理了。 拆点的方式多种多样,远不止上面一种,下面的例子中用到的就与例3不同。 【例4】【例4】 障碍物探测器Marsexplorer(文档附件: Mars.html)(IOI’97): [问题简述]: 在PQ的矩形中,每个格子的地形可能是下列三种之一: 1.1.障碍: 无法通过; 2.2.平地: 平坦无物,可通过; 3.3.石块: 可通过,第一次通过时可采到一块岩石; 求M条的路径(M给定),使得路径能够覆盖到石块数总和最大,路径要满足的条件是: 1.1.每条路径都是从(1,1)到(P,Q),途中每步只能向东或向南走一格; 2.2.路径不通过障碍; [建立网络流模型]: 我们按照常规思路把每条路径看作流量为1的流路径,并根据路径要满足的两个条件,建立如下模型: 1.1.把每个格子看作点,并引两条弧,分别指向其东侧和南侧相邻的点(如果有的话),弧的流量表示通过这条弧的路径数,所以容量为+(m就可以了); 2.2.删去与障碍点相连的弧。 但这只是一个初步的模型,它很显然没能区分“平地”和“石块”。 难点主要就在于: 岩石只有第一次通过时可以采到,之后这个格子就变成平地了。 因此,就需要把含有岩石的点i拆成两个点: i'和i'',分别表示岩石和平地。 具体改造步骤(如图十三所示)如下: 1.1.i''继承与i相连的所有入弧和出弧,且容量不变,收益为0; 2.2.从i''引出一条弧,指向i',令其容量为1,收益为1; 3.3.i'继承与i相连的所有出弧,容量改为1(>1也可以),收益为0; 经过上述转化之后,原问题的求解目标就对应于新模型上流量为M的最大收益流[2]。 上面举的两个例子都是把一个点拆成两个点,但这与“拆点为边”是截然不同的。 这里是为了把一个点具有的各种性质分离开,有几种性质需要分离,就要拆成几个点;而“拆点为边”是为了使点具有边的性质,所以总是固定地把一个点拆成两个,并在两个新点之间添边。 3.3. 边边: 这是“拆分转化”的第3类: 把一条边拆成若干条边。 它和上面的第2类一样,也是用于因素分离。 下面就只简单地举例分析一下。 【例5】【例5】 容量有上下界的网络流: 这是一个标准的网络流问题,许多书上都有该问题的解法和相关证明,所以这里就只简述一下把原图转化为一般的最大流模型的过程[3]: 1.1.加两个新顶点: 附加源s'和附加汇t',作为新的源和汇; 2.2.把原图上的弧(i,j)拆成三条新弧: (i,j)、(s',j)、(i,t'),令C'i,j=Ci,j-Bi,j,C's',j=C'i,t'=Bi,j(Ci,j、Bi,j分别为原图上弧(i,j)的容量上、下界,C'i,j、C's',j和C'i,t'为新弧的容量上界); 3.3.在原来的源和汇之间添加两条容量为+的新弧: (s,t)和(t,s)。 在以上三步中,第二步最为关键,它实现了把原图上的容量上界和下界分离开的目的(如图十四(a)所示)。 图十四(b)和(c)分别是转化前的原图和转化后的新图。 更进一步地,如果点(或边)的性质随着时间的推移而变化着,我们也可以用类似于第2类或第3类的方式把它们拆成许多点(或边),以表示不同时刻不同性质的点。 下面我们就来看一看这类“拆分转化”是如何应用到例6上的。 【例6】【例6】家园Homeland(CTSC'99,下面只简述建模的过程,具体算法分析请见文档附件: homeland..doc): 仔细分析了题意之后,不难想到建立网络流模型来解决这题: 1.1.以太空站为点; 2.2.以往返于太空站之间太空船为边; 3.3.以船的最大载客量为容量上界; 求解目标就是在最短时间内把固定流量(人)从源(地球)送到汇(月球)。 但这里的时间不同于费用,而且边随着时间t的变化存在于不同的点对之间。 因此按时间拆点就很有必要: 把每个点都拆成t个点;把边按照时刻的不同分配在相应的新点对间。 如此一来,原本动态变化着的模型就被转化成了静态不变的新模型了。 从上面举的几个例子可以看出,要分离的性质不同,拆点(边)的方式也就随之不同,只有准确地分析出点(边)要表示的性质,才能转化得到合适的模型。 通过对这三类点和边的“拆分转化”的分析和总结不难发现,它们的目的和应用范围各异,但方法都是一个“拆”字。 在它们的应用上,我们完全不必拘泥于具体形式,只要是建模的需要、解题的需要,就可以按需“拆分”。 只要“拆分”得当,上面的三类“拆分转化”就可以应用得更广。 除了“拆分转化”之外,“补集转化”也是一种不依赖于特定模型的转化方法。 前面在例4的分析中,我们留下了一个问题: 把流量固定的最大收益流转化为最小费用流求解。 这就要求对边权进行一定的修改: 改所有表示“平地”的点对之间的弧(图十三中黑色的弧)的费用为1;改所有指向“岩石”或从这些点指出的弧(蓝色的弧)的费用为0。 这样,原模型上每条流路径的收益就等于P+Q-2(该路径的长度)减去路径上的费用的差。 如此也就实现了把最大收益转化为最小费用的目的。 这种用某个特定值减去原权值的转化技巧,我们就称作权的“补集转化”。 既然有权的“补集转化”,自然也有点和边的“补集转化”。 点和边的“补集转化”是指用全集(如图的点集、边集或是其它集合)减去某个特定的集合(如题目给定的集合或求解目标集合等)的转化技巧。 下面我们就通过具体例子来分析一下。 【例7】【例7】 最大独立集问题及其等价问题: 最大独立集的问题描述如下: 给定无向图G(V,E),其中AV,且E{(i,j)i,jA}=,求A,使得A最大。 它还有两个与之等价的问题: 1.1.最小覆盖问题: 一般地,我们都把最大独立集转化为最小覆盖集,然后根据逻辑运算定律求解(见参考书籍[6]P57): 令B=V-A,则BV,且对于任意一条边(i,j)E,有iB或jB,所以B是图G(V,E)的最小覆盖集。 在这个转化过程中就用到了点的“补集转化”——用点集V减去求解目标集合A,以得到新的目标集合B。 2.2.最大完全子图问题: [问题描述]给定无向图G(V,E),其中CV,对于任意两个点i,jC,且ij,有(i,j)E,求C,使得C最大。 当我们已经知道并且能够证明这个问题是NP完全问题(见参考书籍[3]P658)时,只要能够把它转化为最大独立集问题求解,也就证明了后者是NP难度的,而这一步转化中就要用到边的“补集转化”: 令全集U={(i,j)i,jV},E'=U-E,则在无向图G'(V,E')中,有CV,且E{(i,j)i,jC}=,所以C也是图G'的最大独立集。 例如图十五G'中,黑色的点构成了最大独立集,而白色的点就是最小覆盖集;图G的点集与G'一样,而边集E则是E'的补集,图中黑色的点构成了该图的最大完全子图的点集。 从上面的例子可以看出,“补集转化”往往都是等价转化,而且往往都会使求解目标产生一定的变化。 无论是点、边还是权的“补集转化”,目的都是使模型向着更便于思考和求解的方向转化。 除了上面分析的“拆分转化”和“补集转化”外,图论模型的转化方法和技巧还有很多,而且它们还可以
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图论