算法图论

算法图论
算法图论

算法图论(Graph Theoretic Algorithms)

第一部分:区间图、弦图、相似图、完美图

本书英文版共29讲,第一部分共12讲,系译者学习的同时为备以后查阅复习之便作的翻译,内容基本忠实于原著,且大部分是直译,同时加入了译者的少许想法,并补上了少部分略去的证明过程(限于译者的水平只能证明一些力所能及的证明)。

第1讲是概论导读;第2到10讲比较详细地介绍了区间图、弦图及其相关的性质、算法(包括证明)以及延伸内容,其中第7到9讲涉及相似图的一些内容,部分定理尚未证明;第11、12讲介绍完美图、相交图及其部分特例,侧重于介绍性,概念结论较多但证明较少,可以作为知识性的阅读。

《尚为解决的问题》是译者翻译学习过程中遇到的一些不懂的问题,原文中未给出详细证明,而译者目前还无法自己证明的,这些在译文中将用粗括号扩出。各路高手如有知道方法的情与译者联系,不胜感激!

复旦附中葛潇

第一讲、概论

本讲对这门课程的主要议题进行了大致的介绍。

1.概念

这门课程涉及了一些特殊的图以及这些图上某些已经得到改进及仍未解决的问题。

为了解我们所说的内容,我们必须回顾一些特殊图中的概念、算法、复杂度分析及NP —HARD问题。在这门课中对些将不作深入,我们假设读者以对这些有所了解。

2.一些图的分类

下面我们将给出这门课程中将涉及的一些图的形式。在以后的各讲中将进行深入的分析。

z区间图(Interval graphs):如果一个图能用一些区间的intersection graph表示,那么这个图称为区间图。更准确地说,给定一系列区间,将其中每个区间看作一个顶点,两个顶点间有边,当且仅当这两个点所代表的区间相交。一个图是区间图,当且仅当它能通过以上方法构造出来。(见图1)

图1:一些区间及它们所构成的区间图

我们同时学习各种相关的图,例如弦图和完美图。这部分的主要参考是[Gol80]。

z树(Trees):一个图是一颗树,当且仅当它是连通的,并且没有环。我们将同样学习有关的图,例如partial k-trees. 这部分的主要参考是[Bod93]。

z平面图(Planar graphs):一个图如果能画在二维平面上,且各边没有交点,则该图称为平面图。注意每个树都是平面图,但反之却不一定。我们将同样学习有关的图,例如outer-planar graphs 和 series-parallel graphs(混联图)。这部分的主要参考是[NC88]。

本课程中除特别说明,一般所指的图都是简单的、连通的,且至少有两个顶点(或是图有意义的最少顶点)。显然这不会影响大多数算法的适用性。

同时,一般给出的图都是无向图,虽然有时我们为了设计算法人为地加上方向。

3.一些问题

下面是我们将学习的一些问题,以及它们在一些特殊图上的复杂度。

z最大独立集(Maximum Independent Set):这是著名的NP难题。但在区间图中,最大独立集问题能够在O(N+M)时间内解决,同时在树上可以在线性时间内解决,但对于平面图这仍是NP难题。

z最大割(Maximum Cut):图G=(V,E)上的一个割将该图的顶点分成两个子集:V=A+B。更准确地说,给定一种顶点划分,一个割是哪些一个端点在A中,另一个在B 中的边组成的集合。最大割问题是寻找一种顶点划分方式,使得对应割集中的边数最多。

同样也有最小割问题。最小割问题用最大流的方法可以在多项式时间内解决,但最大割问题是NP难题。但在平面图上最大割问题是多项式级的;在树上,最大割问题是平凡

的(因为树是二分图,因此最大割集就是边集);区间图上最大割问题是open{开放的}。4.典型问题

综上所述可以得知,这门课程的主要问题是:

给定一个问题P和一类图C,在C上解决P的复杂度是多少?

我们将逐个学习各种特定的图,对于某个特定的图,提出一下两个问题:

z有什么图论问题在C上会变得简单些(复杂度低些)?

z有什么图论问题在C上仍是NP难题?

这些有衍生出一些问题:

z在多少时间复杂度内可以判断一个图是否属于C这类图?

z一个图属于图C的充要条件是什么?这将赋予C新的性质。

z如果图G不属于C,它到C的“接近程度”是多少?

这种想法的目的是将G转化位属于C的另一个图G’,在G’上解决问题P,并试图有G’的解获得G的解(或近似解)。

“接近程度”有各种定义,可以是删除或加上一些顶点或边,收缩或展开边,用顶点代替交点等等。

不幸的是这些问题大多数是NP难题……/

第二讲、区间图

本讲中,我们将考虑区间图的一些应用。我们将考虑区间图于其他图有什么不同,以及各种区间图的共同点。

1.介绍

图论学习中常常要考虑一些特殊的图,区间图就是其中之一。我们之后将给出它的严格定义。但目前可以把区间图看作一系列区间的一种表示。有关一系列区间的问题在实际中有广泛的应用,例如日程安排问题、航班调度问题、交通灯的同步协调等。因此学习区间图不仅使我们了解它的数学构形,而且有着在实践中发挥作用的潜力。

学习区间图时,我们首先给出一个更精确的定义,接着将考虑区间图的一些应用,然后学习怎样判定一个图是否是区间图(同时看到一些不是区间图的图),最后看一些对区间图的等价的不同的表示法。

2.定义

一个区间是有两个端点的线段,端点可以是开的或闭的。给定一些区间,可以定义一个相交图(intersection graph)。

定义1:给定一些区间,定义一个相交图的每个顶点v代表一个区间Iv,顶点(v,w)间有边,当且仅当Iv交Iw非空。

定义2:一个图G是区间图,如果它是若干区间的相交图。

定义3:一个图G=(V,E)的诱导子图是由它的一个顶点子集S与E中所有两个端点都在S中的边组成的子图。

我们可以通过删去G中的一些顶点及与它们相联的边得到一个诱导子图。

3.区间图

区间图在一系列领域中有应用前途,例如:

考古学[Spi97]

计划拟定[CLRS00]

生物学[WG86]

请读者参考PDF文件的简述与参考文献。:-P

以下是一些不是区间图的例子:

1、k阶简单环Ck(k>=4)。

我们来看一下C4(见图3),假设它是区间图。由于a与b,c相联,它们对应的区间必须相交。但是b和c之间没有边,因此它们对应的区间不相交这样的情况只可能如图3右图所示。但由于d与b,c均相联,则d对应的区间(简记为区间d)与区间b,区间c都相交,那么它必将与区间a相交,这与a,d间无边矛盾。

2、任何以Ck(k=4)为一个诱导子图的图。

这表明区间图在删除顶点及收缩边的操作下是封闭的。具体地说,如果我们从区间图中删除一个顶点,只要把它对应的区间从区间集中删去,结果仍是一个区间图。如果收缩一条边,只要把其端点所对应的区间合并成一个区间即可。

3、形如图4的树。

与Ck的方法类似,我们可以设计出前六个顶点对应的区间,但加入最后一个顶点g 时,由于区间g必须与区间f相交,则它必须与区间a相交,矛盾。

目前为止我们尚未给出开区间与闭区间或半开闭区间的区别。我们将证明知道它们是等价的。

定理1:开区间、闭区间、半开闭区间对应的区间图是等价的。

注意这不是说我们可以随意地将开区间改为闭区间,或将闭区间改为开区间。这表示给定一个区间图,我们总能设计出一个只包含开区间或闭区间的区间集,使它对应与给定的图。

我们注意到如果不存在“重点”,即一个区间恰在另一个区间开始的点上结束,那么区间的开闭不影响区间图的形态,即区间的开闭可以随意改变。“重点”只可能有三种形态(见图5,对称的情形被忽略了)。其中第一种情况下,两个区间相交,后两种情况则不相交。

4.定理1的证明

证明:我们只证明任意区间集能等价地转化为只包含闭区间的区间集。

首先看一些对于“重点”的操作。对于情况2,两个区间不相交,我们将它们稍微拉开一段很小的距离,并改为闭区间。情况3同样可以这样操作。对于情况1,将它们稍微拉近一段小距离(见图6)。

下面给出正式证明:

给定一个区间集I={I1,I2,…,In},其中每个区间Ii={Si,Fi}两端可以是开的或闭的。我

们再定义I’={I1’,I2’,…,In’},其中Ii={Si’,Fs’}两端都是闭的,其中{Si’,Fi’}如下取值:

其中的值将在之后给出。注意以上操作是之前提到的操作正式的定义。

引理1:对于任意,有,反之亦成立。

证明:

1、充分性

有两种情况,这两个区间或在某个“重点”相交,或有一段非空的公共开区间。

情况1经操作后,两个区间将重合长为的一段区间。情况2中有三种可能。

如这端都是闭,那么操作后它们的交集长度将增加;如这两端都是开的,操

作后它们的交集长度将减少2×;如这两端一开一闭,操作后它们的交集长

度将减少/2。最坏情况下交集长度将减少2×,如果令<=1/3*(那端交集

的长度),则在所有情况下这两个区间仍然相交。充分性得证。

2、必要性

只要证明充分性的否命题,情况与充分性类似,只要满足<=1/3*(两靠近端

点的距离)即可。(参见图9)

最终,取<=1/3可以保证引理1对于所有区间成立。

引理1中对所取的区间没有限制,因此操作后对应的区间图的形态不变,定理1得证。▋

定理1表明任何区间集可等价为一个有闭区间组成且没有“重点”的区间集,这样我们可以按左端点坐标从小到大的顺序给区间图的顶点编号。同时我们可以给每条边加上方向,即从左往右(弧头编号>弧尾编号)。这里我们给出一些定义:

定义6:有向图G=(V,E)中顶点Vi的前驱集Pred(Vi)={Vj | (Vj,Vi)E};

后继集Succ(Vi)={Vj | (Vi,Vj)E}。|Pred(Vi)| 称为Vi的入度;|Succ

(Vi)| 称为Vi的出度。

注意:区间图中所有Pred(Vi)中的元素对应的区间两两相交。这说明{Vi}Pred (Vi)是一个团。

第三讲、基于区间图的一些算法

本讲中我们将了解有关计算区间图的染色数与最大团的算法。为此我们将介绍完美消除序的概念。我们将看到这两个NP难题在区间图上能用线性的时间解决。

1.介绍

图的染色问题是图论中的经典问题,在诸如拟定计划等发面有一系列应用[Wer85]。尤其是平面图的染色问题,即地图染色问题,已被深入地研究过。其中最著名的成果包括Appel 和Haken证明的四色定理等[AH76]。

同样地,最大团问题也在诸多领域有着应用,例如operation research、种系分析、图案识别等[Oga86]。

本讲中我们将在区间图上有效地解决这两个问题,同时介绍图的一个性质,使得该算法达到最优。在以后各讲中我们讲深入研究这类图,并发现它属于弦图的范畴。

让我们从回顾区间图的定义开始本讲的内容:

定义1:给定一些区间,满足每个顶点代表一个区间Iv,顶点间有边,当且仅当两个区间相交的图称为区间图。

2.图的染色

这一节我们将学习区间图的顶点染色问题,即一种给区间图顶点染色的方案,使得每条边的两个端点颜色不同。我们暂不考虑边染色问题。

定义2:一个图G的染色数X(G)使将G进行染色所需要的最少的颜色数。

定义3:我们把“能否将一个图用K种颜色染色”称为K染色问题。

2染色问题等价与判断一个图是否是二分图。由于满足性问题中2-SAT问题是多项式级的,而3-SAT问题是NP难题,能够证明对任意图的2染色问题是线性的而K染色问题(K>=3)是NP难题。我们将简单地阐述3染色问题的复杂度。

定理1:3染色问题是NP难题。

(注意:本课程中遇到的多数问题是NP难题,我们只证明问题的NP性。)证明:

定义4:NAE-3-SAT问题:给定一个命题集合U和一个由U及非U的若干三元子集组成的集合C,是否存在一个U中变量的取值方法使C中的每个子集至少包含一个TRUE值与一个FALSE值?这已被证明是NP难题[GJ79,p.259]

我们如图1构造一个图:

z对U中的每个变量建立两个顶点u和u’(称为内点)以及连接u、u’与一个共同的中心点r的三条边。

z对每个c C,定义一个两两相联的三角形代表,三个点分别与对应的三个内点相联。

z我们用R,T,F这三种颜色染色,其中R是r的颜色。

z对于每个变量,u与u’中的一个必须染T(TRUE),另一个染F。

接下来要说明的是NAE-3-SAT问题是该图G的3染色问题的特例。

必要性:如果一个图能够3染色,则内点必为T或F色,代表这个命题的真假,对于余下的每个三角形,它们所连接的三个内点不可能是同色的(否则这三个点只可能染两种颜色,必定不是可行的反色方法),即满足NAE-3-SAT问题的要求。

我们已经证明如果我们能解决3染色问题,那么我们也能解决NAE-3-SAT问题。因为NAE-3-SAT已被证明是NP难题,因此3染色问题也是NP难题。定理1得证。

3.图染色的一个贪心算法

虽然求图的染色数是NP难题,我们能用贪心算法进行一种可行染色(颜色数可能大于X(G))。

这个算法能找到G的一种可行染色方法,并且使用至多max{Vi的入度| 1<=1<=|V|}+1种颜色(当然这个结果很不理想/)。注意顶点的顺序直接影响着颜色数的多少。

注:以上算法表明平面图可以用六色染色。(见2003集训队论文,刘才良)

4.染色算法最佳的条件

现在我们将研究在什么情况下,贪心算法能够得到最优解。

定理2:对于区间图,使用自然编号法(见第二讲)编号,则以上贪心算法可以得到最优解。

证明:我们已知贪心算法得到的颜色数最多是max{Vi的入度| 1<=1<=|V|}+1。记I*为这

个最大值达到时的顶点编号,我们知道区间图中一个顶点及它的所有前驱构成以一个团,因此Pred(Vi*) V i*是一个大小为(V i*的入度+1)的团。为给这个团

染色需要(V i*的入度+1)种颜色。由此可见贪心算法找到的颜色数达到了下界,即最优。定理2得证。▋

这个证明了为了得到最优解我们所要做的只是寻找一个特殊的顶点编号序列。我们给这个性质一个名称:

定义5:一个顶点序列{V1..Vn}如果对任意i满足Pred(Vi)是一个团,那么这种序列称为完美消除序列。

很容易知道:

定理3:如果一个图G具有完美消除序列,就可以在线性时间内求出X(G)。

注:1:即使我们知道一个图有完美消除序列,我们不得不找到这个序列。之后我们将得知这在线性时间内可以解决。具体细节参见第五讲的内容或[Gol80]。

2:一个具有完美消除序列的图不一定是区间图,图2就是一个例子。

5.最大团问题

我们将讨论的下一个问题是:最大团问题的复杂度是多少?

回忆一下最大团的有关定义:

定义6:一个图的最大团数W(G)是G构成团的最大的顶点子集的元素个数。

定理4:计算W(G)是NP难题。

完整的证明可参考[GJ79,p.53-56]。我们只给出以下两步证明的大致框架:

1.证明最大团问题与顶点覆盖问题等价:如果I是G的一个顶点覆盖,那么G-I是中的一个团。

2.证明3-SAT问题是顶点覆盖问题的特解问题。▋

现在我们说明图G是区间图时,能够在线性时间内算出W(G)。

在定理2的证明中我们看到Pred(Vi*) V i*是一个大小为|Pred(V i*)|+1的团,因此W(G)

>=|Pred(V i*)|+1。我们又知道对于任意图G,X(G)>=W(G),因为染色一个大小为K的团至少需要K中颜色。定理2 的证明表明X(G)=|Pred(V i*)|+1,所以X (G)>=W(G)>=|Pred(V i*)|+1=X(G),这表明:

定理5:对于具有完美消除序列的图G,X(G)=W(G)。

于是在第三节中的贪心算法中找到的团中的一个就是最大团,因此找最大团在O(m+n)时间内能够解决。

我们同时得到:

推论1:对于区间图的任何诱导子图G,X(G)=W(G)。证明:区间图的任何诱导子图都是区间图,由定理5即证。▋

第四讲、区间图及其补图

本讲中我们将讨论在一个区间图中寻找最大独立集的问题。我们还将研究区间图的补图与可无环传递定向图的关系。最后我们将介绍弦图的概念。

1.介绍

之前各讲中我们讨论了区间图,并知道一些典型的难题在区间图上可以高效地解决。有一些问题,诸如图的染色、最大团问题、哈氏回路问题以及判断两个图是否同构的问题都是NP难题。然而在区间图上,我们能出色地将这些问题在多项式(而且经常是线性)时间内解决。这一讲中将讨论的最大独立集问题就是其中之一。我们将使用贪心算法求出一个图的最大独立集,前提是该图具有完美消除序列并且这个序列已知。有关该问题的详细内容参见Lorna Stewart的主页http://web.cs.ualberta.ca/stewart/GRAPH/index.html。

我们将了解的另一类图是区间图的补图。我们将学习一种对这些图的边的自然确定法,并发现区间图的补图实际上是相似图。

最后,我们将介绍弦图并证明具有完美消除序列的图都是弦图。

2.定义

一个图G的独立集是它的一个边集为空的诱导子图。一个具有K各顶点的独立集称为K 独立集。一个极大独立集是一个独立集,但加入任何其他节点都将破坏独立集的性质。一个

最大独立集是G中存在的顶点数最多的独立集,记为。

3.寻找独立集的一个可行算法

以下算法用贪心法寻找图G的一个独立集。它不一定是极大(或最大)的。算法的输入是图G以及一个顶点序列{V1..Vn}

初始时记所有顶点未访问(untouched)。

假设贪心算法的输入是一个完美消除序列,它能保证得到一个最大独立集吗?考虑图1所示的图G。

显然这个图具有完美消除序列{V1,V2,V3,V4}。然而当贪心算法作用与该图时,它将找到独立集{V1},这显然不是最大独立集。然而如果将完美消除序列的逆序作为输入,却可以得到最大独立集。

定理1:如果{V1..Vn}是一个完美消除序列,那么以上贪心算法对与顶点序列{Vn..V1}可以得到最大独立集。

证明:很容易得知完美消除序列的逆序具有如下性质:对于每个i{1..n},{Vi}Succ(Vi)

是一个团。对与某个未方位的点Vi,它与它的后继中至多有一个在独立集中。如果这些点都不在独立集中,显然加入点Vi后仍是一个独立集,而且必原来更大;如果这些点中有某个Vj在独立集中,用Vi代替Vj,显然得到的仍是一个独立集,而且与原来一样大。综上所述,对任意一个不包含Vi的独立集,总存在一个包含Vi的独立集,且不比原来小,这对最大独立集同样成立,即Vi的贪心选择是正确的。定理1得证。▋

另外,我们给出一个利用拟阵进行的证明作为参考:

证明:建立拟阵M=(S,I),S为图G的顶点集,按照完美消除序列逆序编号;I为G的独立集集合。显然I具有遗传性质。又设I中的两个元素A,B,|A|>|B|,B中的每个顶点最多有一个后继属于A,否则由于B的后继集是一个团得出矛盾。因为|A|>|B|,A中必有至少一个元素V不是B中任何元素的后继,即将V加入B中,B仍是独立集。因此I满足交换性质。综上所述,M是一个拟阵。令每个S中的元素的权为1,则最大独立集问题转化为求拟阵的最大权独立子集问题。根据拟阵理论,贪心算法成立。定理1得证。

通过运用以上一类算法,很多NP难题在区间图上能够用线性或多项式时间解决,这些问题包括图的染色、最大团问题、最大独立集问题、哈氏回路问题以及判断两个图是否同构。然而另一些问题仍然是NP难题,例如货郎问题:给定一些城市即之间的距离,要求找出一条访问每个城市的最短路径。如果将城市看作顶点,距离作为边权,货郎问题就是在图中寻找包含所有顶点的最短路。由于可以在任意两个城市间行走,该图是一个完全图Kn。显然Kn(不包括边权)是一个区间图。

4.区间图的补图

许多情况下,一个图与它的补图属于同一类图。那么区间图也是这样么?

构造一个区间图,完美在相交的区间之间连边。因此在它的补图中,每个顶点仍然代表一个区间,但两个顶点之间有边,当且仅当对应的区间不相交(见图2)。另外,边由左到

右进行定向。给定一个区间图G=(V,E),它的补图=(V,DE),其中(u,v)DE,

u,v V是一条u到v的有向边,区间Iu在Iv的左边。

定义1:图G=(V,E)的一个定向图(又称竞赛图)是把E中的每条边(u,v)定向后得到的有向图。G的一个无环定向图是它的一个不含有向环的定向图。一个定向方法如果

满足对所有u,v,w V,且u到v有边,v到w有边,则u到w有边,则称为具有传递

性的定向。一个边定向无环且具有传递性的定向图称为无环传递定向图。

定义2:具有传递定向图无环传递定向图的无向图称为相似图。补图是相似图的图称为伴相似图。

显然一个区间图的补图是边无环可传递的。因此区间图的补图(不带方向)是可无

环传递定向的,或者说区间图(不带方向)是伴可无环传递定向的。但区间图不一定是可无环传递定向的(包含两条边的链就是一个反例),所以区间图的补图不一定是区间图。

反之,所有伴相似图都是区间图吗?图3表示了一个相似图G,它的补图是伴相似图,但却不是区间图(因为它包含四阶简单圈C4)。

另外,二分图都是可无环传递定向的,只要另所有的边由X集指向Y集即可。

5.弦图

定义3:如果一个图的任何诱导子图都不是K阶环(K>=4)(见图4),那么该图称为弦图(见图5)。

与区间图类似,我们感兴趣的是弦图具有哪些性质,它属于或包括哪些类图。

定理2:如果一个图G具有完美消除序列,则G是弦图。

证明:假设G不是弦图,令C是一个K阶环(K>=4),C中不相邻的顶点见没有边。又令V 是该环内最后一个在完美消除序列中出现的顶点。则V至少有两个相邻的顶点(即环中的相邻点),这两个顶点必定构成一个团(它们都是V的前驱),即它们之间有边,这与C的性质矛盾(见图6)。定理2得证。▋

第五讲、完美消除序列

本讲的主题有关弦图和完美消除序列。我们已知具有完美消除序列的图都是弦图,本讲中将了解到所有弦图都具有完美消除序列。

为了证明这一点,我们引入了单纯顶点的概念,并证明弦图都含有单纯顶点。证明过程中,完美还将得知弦图的子图也是弦图。

我们讲给出两个在线性时间内求出完美消除序列的算法,并给出了一个算法运行全过程的的例子。

作为一个推论,独立集、染色、团等问题在弦图上都能用线性时间解决。

1.介绍

我们已经知道弦图的定义,弦图同时又有很多名字:严格巡回图、单调传递图、三角图、完美消除图等。其中有些不难理解?。

我们已学习了区间图,不久将知道区间图都是弦图。

2.弦图与完美消除序列

我们的目标是证明图G是弦图,当且仅当G具有完美消除序列。这个命题的必要性已经证明,现在我们来证明充分性。

首先引入单纯点的概念:如果与顶点V相邻的所有顶点构成一个团,则V称为单纯点。定理1:任何弦图G具有至少一个单纯点。如果G不是完全图,那么它至少具有两个不相邻的单纯点。

证明:完全图的情况是平凡的(每个顶点都是单纯点),我们只考虑G不是完全图的情况。

我们对G的顶点数N使用归纳法:

1:奠基N=1时。平凡解,显然成立。

2:归纳假设:对所有N<=K(K>=1),G有两个不相邻的单纯点。

3:归纳证明:令N=K+1,

由于G不是完全图,可以找到边(a,b)E。

记G[V-S]为G的顶点子集V-S诱导的子图。S为V-{a,b}中的最小的子集,满足a 与b在G[V-S]两个的不同的连通分支A和B中,S可以是空集。

S的这种取法一定存在,因为我们可以令S为所有与a,b相邻的顶点集合(G-S中a,b是孤立点)。

我们的目标是在A和B中分别找到一个单纯点。我们只考虑在A中找到一个单纯点,B 中的方法是同样的。

令GA+S是顶点集A S诱导的子图。

情况1:G A+S是完全图。那么a是G A+S中的一个单纯点,也是G中的单纯点(由于a A ,a的相邻点都在G A+S中)。

情况2:GA+S不是完全图。由于B GA+S,则 | GA+S | < |G| 根据归纳假设,GA

+S中有两个不相邻的单纯点x,y,(x,y)E。

情况2A:x,y中有一个属于A,不妨设为x。与情况1类似,x也是G中的单纯点。

情况2B:x和y都属于S。我们将证明这种情况不存在。用反证法。

引理1:x与y在A、B中都有相邻的顶点。

证明:不失一般性,假设x在A中没有相邻顶点。那么我们可以将x从S中删去,得到一个更小的S’,S’同样将A,B分离,这与S的最小性矛盾。引

理1得证。

于是,令x的两个相邻点ax A,bx B,y的两个相邻点ay A,by B。

由于A是一个连通分支,存在从x到y的一条路径,且该路径除x,y外的所有

顶点都在A中。同理存在一条除端点都在B中的路径连接x,y(见图1)。

设使用A中顶点从x到y的最短路径是,

使用B中顶点从x到y的最短路径是,则

是一个

环,显然它的长度不小于4。当ax=ay且bx=by时它的长度是4。

由于在弦图中,所有长度不小于4的环上都有弦(连接不相邻顶点的边),我们

必须在以上环中找到一条弦。显然A到B中没有弦(A,B是不同的连通分支)。

A到A{x,y}中或B到B{x,y}中也没有弦,因为我们选取的最短路。而

(x,y)G,也不可能是弦。因此这个环上没有弦,这与G是弦图矛盾。因

此情况2B不存在。

综上所述,A中存在一个单纯点。同理B中也存在一个单纯点。显然这两个点不相邻。

定理1得证。▋

以上证明使用了一个事实:A S是一个弦图。下面进行证明:

定理0:弦图的任何诱导子图都是弦图。

证明:假设图G是一个弦图,H是G的任意一个诱导子图。那么有V(H)V(G),E

(H)E(G)。显然H中没有新的环出现。因为G中所有大于3阶的环都有弦,这对

H中的环显然也成立。定理0得证。▋

推论2:每个弦图都有我们消除序列。

证明:对顶点数N归纳。

1:N=1,显然成立。

2:N=K-1,K>=2成立时,令N=K取G中的一个单纯点Vk,G[V-Vk]也是弦图,

有归纳假设,令它具有一个我们消除序列{V1..Vt},t=K-1。由于Vk是单纯点,易得序列{V1..Vt,Vk}是G的一个完美消除序列。推论2得证。▋

推论2的证明暗示了一种迭代地寻找完美消除序列的方法。

这种方法最先由Fulkerson和Gross在1965年提出。他们提出运行这个算法时将出现两种情况:

算法运行至没有顶点剩余。那么找到了一个完美消除序列,且G是弦图。

在某个时刻,找不到单纯点。那么G不是一个弦图。

推论3:独立集问题、染色问题、团问题在弦图上都可以在线性时间内解决。

证明:首先寻找一个完美消除序列。下一节中我们将得知这可在线性时间内解决。然后使用以前各讲的算法很容易解决上述的问题。推论3得证。▋

3.算法

本节中我们将了解在O(n+m)时间内寻找完美消除序列的具体算法。

3.1.最大势算法(MCS)

以下算法是Tarjan在1976年提出的。算法中顶点从1到N编号。通过选择一个未选择但与最多的已选择顶点相邻的顶点。

可以得知得出的序列{V1..Vn}是完美消除序列。证明从略。

3.2.字典序广度优先搜索(Lexicographical BFS)

以下算法由Lueker、Rose、Tarjan在1976年提出。算法将顶点标号,然后选择字典序“最大”的标号顶点。标号仅在选择过程中使用。标号La大于Lb,当且仅当字典中La在Lb后出现。

算法的正确性将在下一讲中证明。

4.算法过程实例

本节中我们将给出以上两种算法运行的完整实例。图中灰色顶点表示已选择的顶点,黑色顶点表示目前选择的顶点。(译者注:这里只给出图例描述,具体图例请看E文版。) 4.1.最大势算法(MCS)

第K次迭代后,顶点V1..Vk的值将被标出。

顶点边的数字表示:顶点(该顶点的相邻点中已选择的顶点数)。

每次迭代是我们只对尚未选择的顶点感兴趣,因此我们将不更新已选择顶点的相邻点中已选择的顶点数。

3.2.字典序广度优先搜索(Lexicographical BFS)

第K次操作时的值被标出。

顶点边的数字表示:顶点(该顶点的标号)。

我们不更新已选择顶点的标号。

注意到两种算法得出的完美消除序列是相同的,但不一定始终是这样。

另外,可以发现存在MCS与BFS都得不到的完美消除序列。这将作为本讲的作业?。

第六讲、弦图的判定

给定一个弦图,LexBFS与MCS算法可以找到一个完美消除序列。本讲中,我们将了解这两种算法实现的细节,并给出简要的正确性证明。同时我们将看到LexBFS在O(n+m)的时间内得到完美消除序列。

1.介绍

每个弦图都有完美消除序列。我们将用LexBFS算法在O(n+m)的找到这个序列。回忆以下LexBFS算法:每次选择标号最大的顶点并更新它的相邻点。直接做到这一点需要多余线性的时间,我们使用了特殊的数据结构使得寻找、更新顶点的时间降为O(1)。

判定一个图是否是弦图,我们需要测试LexBFS算法返回的序列是否是完美消除序列。朴素的算法是测试每个顶点的前驱集合是否构成一个团,这需要

的时间。但事实上,我们可以知道使用恰当的测试顺序,一个完美消除序列的每条边至多被检查两次。因此我们得到了一个时空复杂度都为O(m+n)的算法。

2.LexBFS算法的复杂度

回忆以下LexBFS算法的流程:

我们可以指出该算法是一个广度优先搜索。观察一下算法生成的搜索树,顶点Vn的相邻点在Vn-1的相邻点之前被访问。LexBFS与标准BFS的唯一区别是LexBFS给Vn的相邻点加上了特别的顺序。(图1)

3.数据结构

为了高效地执行LexBFS算法,我们使用一个链表形的数据结构,其中表Q中的每个节

点是指向另一个链表的指针,称为一个“桶”。表Sl(l表示一个标号)包含了所有的满足L (V)=l顶点V,L是顶点V的标号。Q中不能包含空链表。Q中的各桶按字典序排列,最大的在最前面。我们看一个例子:

假设我们首先选择顶点A并标号它的所有相邻点;接着,我们选择顶点C并更新它的相邻点,我们得到的表Q将如图3所示。

实际中,每个顶点所在的桶S(L(Vi))也被记录下来。另外,每个桶在Q中的位置也被记录下来。注意:为了插入与删除的方便,这些链表都是双链表。

对于这种数据类型的世纪操作,初始时所有顶点都标号,因此Q只有一个桶包含了所有顶点。显然这个初始化能在O(n)时间内解决。

为了获得下一个顶点并更新数据,我们进行一下操作:

1.令Vi是第一个桶中的第一个元素(显然Vi是目前标号最大的一个顶点)。

2.将Vi从桶S(L(Vi))中删去。

3.如果S(L(Vi))已空,将它从Q中删去。

4.对于每个Vi的相邻点W:

5.如果W仍在Q中(W尚未选择,必须更新它的标号和在Q中的位置)

6.找到S(L(W))以及它在Q中的位置。

7.寻找Q中S(L(W))上一个桶。

8.如果这样的桶不存在,或它不是

9.在Q中的当前位置建立一个桶。

10.将W从S(L(W))中取出并加入中。

11.如果S(L(W))已空,将它删除。

12.将L(W)更新为。

现在分析该算法的复杂度。获得Vi以需要O(1)时间。从桶中删除一个元素也只要O (1)时间。

更新Q时,我们必须更新Vi所有未选择的相邻点。对每个顶点需要O(1)时间(所有需要的值都被储存下来了)。因此用时为O(顶点Vi的度)。总的时空复杂度都为O(n+m)。

空间也是线性也许不很明显。注意每个标号的长度可能到达Ω(n),例如对于完全图。但注意我们只在选择某个顶点W的相邻点时才增长它的标号。因此每个顶点的标号长度与它的度成正比,所以总空间复杂度为O(n+m)。

我们下面证明这个算法的确找到一个完美消除序列(如果有的话)。

定理1:令G=(V,E)是一个图,{V1..Vn}是LexBFS算法得出的序列(Vn是首先被选

择的)。如果G是弦图,则{Vn..V1}是一个完美消除序列。

证明:我们只需要证明V1是单纯点,接下来使用归纳法就可以解决。我们只简略地说明这个证明,详细的证明见[Gol80]。

假设V1不是单纯点,那么存在V1的两个相邻点Vi和Vj,它们之间没有边。不妨令j>i,即Vj在完美消除序列(假设是)中在Vi之前。(图4)

注意Vi和Vj在LexBFS算法中都在V1之前被选择。当我们选择Vj时,我们将j加到它所有的未选择的相邻点的标号中。那么j也被加入到L(V1)中,但由于Vi、Vj不相邻,我们没有将j加入到L(Vi)中。于是我们知道:

注意到Vi在算法中先于V1被选择,那么Vi的标号必须不比V1小。但由于L(V1)包括j而L(Vi)不包括,那么只可能在标号更早的地方,L(Vi)大于L(V1)。也就是说,j之前必定存在一个数k,它在L(Vi)中,但不在L(V1)中:

那么,一定有顶点Vk,k>j,Vk于Vi相邻但不与V1相邻,见图5:

注意边(Vj,Vk)不会存在,因为如果有这条边,G将有一个无弦的4阶环V1,Vi,Vk,Vj,这与G是弦图矛盾。

我们小结一下我们的证明。Vi的标号包含k但Vj的标号不包含。那么我们为什么在LexBFS算法中在Vi之前选择Vj呢?则一定存在另一个Vk之前的顶点与Vj相邻但不与Vi相邻。【通过一系列论证(这些就是这里简略的部分),我们可以证明那个点与V1、Vk都不相邻】(后者比较容易解决,只要用弦图的性质)。

于是我们又一次重复论点:为什么Vk在Vj之前被选择?于是又有之前的另一个顶点……这样的证明不断进行,知道推出矛盾(图6):每次都将导出一个新的顶点,但G 的顶点是有限的,矛盾。因此V1是单纯点。根据上一讲的归纳证明,定理1得证。

图论算法及其MATLAB程序代码

图论算法及其MATLAB 程序代码 求赋权图G =(V ,E ,F )中任意两点间的最短路的Warshall-Floyd 算法: 设A =(a ij )n ×n 为赋权图G =(V ,E ,F )的矩阵,当v i v j ∈E 时a ij =F (v i v j ),否则取a ii =0,a ij =+∞(i ≠j ),d ij 表示从v i 到v j 点的距离,r ij 表示从v i 到v j 点的最短路中一个点的编号. ①赋初值.对所有i ,j ,d ij =a ij ,r ij =j .k =1.转向② ②更新d ij ,r ij .对所有i ,j ,若d ik +d k j <d ij ,则令d ij =d ik +d k j ,r ij =k ,转向③. ③终止判断.若d ii <0,则存在一条含有顶点v i 的负回路,终止;或者k =n 终止;否则令k =k +1,转向②. 最短路线可由r ij 得到. 例1求图6-4中任意两点间的最短路. 解:用Warshall-Floyd 算法,MATLAB 程序代码如下: n=8;A=[0281Inf Inf Inf Inf 206Inf 1Inf Inf Inf 8607512Inf 1Inf 70Inf Inf 9Inf Inf 15Inf 03Inf 8 Inf Inf 1Inf 3046 Inf Inf 29Inf 403 Inf Inf Inf Inf 8630];%MATLAB 中,Inf 表示∞ D=A;%赋初值 for (i=1:n)for (j=1:n)R(i,j)=j;end ;end %赋路径初值 for (k=1:n)for (i=1:n)for (j=1:n)if (D(i,k)+D(k,j)

图论算法详解(C++版)

1.1、prim算法: 无向图的生成树就是从图的边集中选择一些边,使得这些边构成一个连通无环图,也就是树。如果给每一条边加一个权,所有生成树中权和最小的生成树称为最小生成树。 【Prim算法思想】 任意时刻的中间结果都是一棵树,每次花费最小的代价,用一条边把不在树中的结点加进来。【最小生成树算法实例】 现有一张城市地图,图中的顶点为城市,无向边代表两个城市间的连通关系,边上的权代表公路造价。在分析了这张图后发现,任一对城市都是连通的。现在要求用公路把所有城市联系起来,如何设计可使得工程的总造价最少? 【输入】第一行两个数v(v<=200),e,分别代表城市数和边数以下e行,每行为两个顶点和它们之间的边权w(w<1000)。 【输出】连通所有城市的公路最小造价。 【输入样例】 6 10 1 2 10 1 5 19 1 6 21 2 3 5 2 4 6 2 6 11 3 4 6 4 5 18 4 6 14 5 6 33 【输出样例】50 原图 最小生成树 #include #include #include #include using namespace std; int i,j,k,n,m,mi,t,s,a[1000][1000]; void prim() { int mi,p,f,k,d[1000]; bool v[1000]; memset(v,false,sizeof(v)); f=1; for (i=2;i<=n;i++) {

d[i]=INT_MAX; } d[f]=0; s=0; for(i=1;i<=n;i++) { mi=INT_MAX; for (j=1;j<=n;j++) if ((v[j]==false) && (d[j]

一笔画问题是图论中一个著名的问题

一笔画问题是图论中一个著名的问题。一笔画问题起源于柯尼斯堡七桥问题。数学家欧拉在他1736年发表的论文《柯尼斯堡的七桥》中不仅解决了七桥问题,也提出了一笔画定理,顺带解决了一笔画问题[1]。一般认为,欧拉的研究是图论的开端。 与一笔画问题相对应的一个图论问题是哈密顿问题。 目录[隐藏] 1 问题的提出 2 一笔画定理 2.1 定理一 2.2 定理二 3 例子 3.1 七桥问题 3.2 一个可以一笔画的例子 4 一笔画问题与哈密顿问题 5 参见 6 参考来源 [编辑] 问题的提出 一笔画问题是柯尼斯堡问题经抽象化后的推广,是图遍历问题的一种。在柯尼斯堡问题中,如果将桥所连接的地区视为点,将每座桥视为一条边,那么问题将变成:对于一个有着四个顶点和七条边的连通图G(S,E),能否找到一个恰好包含了所有的边,并且没有重复的路径。欧拉将这个问题推广为:对于一个给定的连通图,怎样判断是否存在着一个恰好包含了所有的边,并且没有重复的路径?这就是一笔画问题。用图论的术语来说,就是判断这个图是否是一个能够遍历完所有的边而没有重复。这样的图现称为欧拉图。这时遍历的路径称作欧拉路径(一个圈或者一条链),如果路径闭合(一个圈),则称为欧拉回路[1]。 一笔画问题的推广是多笔画问题,即对于不能一笔画的图,探讨最少能用多少笔来画成。 [编辑] 一笔画定理 对于一笔画问题,有两个判断的准则,它们都由欧拉提出并证明[1]。 [编辑] 定理一 有限图G是链或圈的充要条件是:G为连通图,且其中奇顶点的数目等于0或者2。有限连通图G是圈当且仅当它没有奇顶点[2]。 证明[2][3]: 必要性:如果一个图能一笔画成,那么对每一个顶点,要么路径中“进入”这个点的边数等于“离开”这个点的边数:这时点的度为偶数。要么两者相差一:这时这个点必然是起点或终点之一。注意到有起点就必然有终点,因此奇顶点的数目要么是0,要么是2。 充分性: 如果图中没有奇顶点,那么随便选一个点出发,连一个圈C1。如果这个圈就是原图,那么

经典图论问题

5经典图论问题 5.1 一笔画问题 一笔画算法即是从起点a开始选择关联边(第一这条边不是往回倒,第二这条边在前面延伸路上没有出现过)向前延伸,如果到达终点b,得到a—b迹,判断路上的的边数是否为图的总边数,是就终止,否则选择迹上某个关联边没有用完的顶点v,用同样方式再搜索v—v的闭迹,添加到a—b迹上,即得到a—v---v—b迹,如果这个迹的边数还没有达到总边数,则再选择迹上某个关联边没有用完的顶点。。。。。。逐步扩展即可。

二、弗罗莱(Fleury )算法 任取v 0∈V(G),令P 0=v 0; 设P i =v 0e 1v 1e 2…e i v i 已经行遍,按下面方法从中选取e i+1: (a )e i+1与v i 相关联; (b )除非无别的边可供行遍,否则e i+1不应该为G i =G-{e 1,e 2, …, e i }中的桥(所谓桥是一条删除后使连通图不再连通的边); (c )当(b )不能再进行时,算法停止。 5.2 中国邮递员问题(CPP ) 规划模型: 设ij x 为经过边j i v v 的次数,则得如下模型。 ∑∈= E v v ij ij j i x z ?min ∑ ∑ E ∈E ∈∈=j i i k v v i v v ki ij V v x x , E ∈∈≤j i ij v v N x ,1 ..t s

5.3旅行推销员问题(TSP,货郎担问题)(NPC问题) 定义:包含图G的所有定点的路(圈)称为哈密顿路(圈),含有哈密顿圈得图称为哈密顿图。 分析:从一个哈密顿圈出发, 算法一:(哈密顿圈的充要条件:一包含所有顶点的连通子图,二每个顶点度数为2) 象求最小生成树一样,从最小权边加边,顶点度数大于3以及形成小回路的边去掉。 算法二: 算法三:

图论算法及matlab程序的三个案例

图论实验三个案例 单源最短路径问题 Dijkstra 算法 Dijkstra 算法是解单源最短路径问题的一个贪心算法。其基本思想是,设置一个顶点集合S 并不断地作贪心选择来扩充这个集合。一个顶点属于集合S 当且仅当从源到该顶点的最短路径长度已知。设v 是图中的一个顶点,记()l v 为顶点 v 到源点v 1的最短距离, ,i j v v V ?∈,若 (,)i j v v E ?,记i v 到j v 的权ij w =∞。 Dijkstra 算法: ① 1{}S v =,1()0l v =;1{}v V v ??-,()l v =∞,1i =,1{}S V v =-; ② S φ=,停止,否则转③; ③ ()min{(),(,)} j l v l v d v v =, j v S ∈,v S ?∈; ④ 存在 1 i v +,使 1()min{()} i l v l v +=,v S ∈; ⑤ 1{} i S S v +=, 1{} i S S v +=-,1i i =+,转②; 实际上,Dijkstra 算法也是最优化原理的应用:如果12 1n n v v v v -是从1v 到 n v 的最短路径,则 12 1 n v v v -也必然是从1v 到 1 n v -的最优路径。 在下面的MATLAB 实现代码中,我们用到了距离矩阵,矩阵第i 行第j 行元 素表示顶点i v 到j v 的权ij w ,若i v 到j v 无边,则realmax ij w =,其中realmax 是 MATLAB 常量,表示最大的实数+308)。 function re=Dijkstra(ma)

图论算法

Dijkstra 算法: 用矩阵n n a ?(n 为顶点个数)存放各边权的邻接矩阵,行向量 pb 、1index 、2index 、d 分别用 来存放P 标号信息、标号顶点顺序、标号顶点索引、最短通路的值。其中分量 ? ? ?=顶点未标号当第顶点已标号 当第i i i pb 01)(; )(2i index 存放始点到第i 点最短通路中第i 顶点前一顶点的序号; )(i d 存放由始点到第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(a)); d(1:length(a))=M;d(1)=0;temp=1; while sum(pb)=2 index=index(1); end index2(temp)=index; end d, index1, index2 %dijkstra 最短路算法通用程序,用于求从起始点s 到其它各点的最短路 %D 为赋权邻接矩阵,d 为s 到其它各点最短路径的长度,DD 记载了最短路径生成树 function [d,DD]=dijkstra_aiwa(D,s) [m,n]=size(D); d=inf.*ones(1,m); d(1,s)=0;

图论算法及matlab程序的三个案例

图论实验三个案例 单源最短路径问题 1.1 Dijkstra 算法 Dijkstra 算法是解单源最短路径问题的一个贪心算法。其基本思想是,设置一个顶点集合S 并不断地作贪心选择来扩充这个集合。一个顶点属于集合S 当且仅当从源到该顶点的最短路径长度已知。设v 是图中的一个顶点,记()l v 为顶点 v 到源点v 1的最短距离, ,i j v v V ?∈,若 (,)i j v v E ?,记i v 到 j v 的权 ij w =∞ 。 Dijkstra 算法: ① 1{}S v =,1()0l v =;1{}v V v ??-,()l v =∞,1i =,1{}S V v =-; ② S φ=,停止,否则转③; ③ ()min{(),(,)} j l v l v d v v =, j v S ∈,v S ?∈; ④ 存在1i v +,使1()min{()}i l v l v +=,v S ∈; ⑤ 1{}i S S v += ,1{}i S S v +=-,1i i =+,转②; 实际上,Dijkstra 算法也是最优化原理的应用:如果121n n v v v v - 是从1v 到n v 的最短路径,则121n v v v - 也必然是从1v 到1n v -的最优路径。 在下面的MATLAB 实现代码中,我们用到了距离矩阵,矩阵第i 行第j 行元素表示顶点i v 到 j v 的权 ij w ,若i v 到 j v 无边,则 realmax ij w =,其中realmax 是 MATLAB 常量,表示最大的实数(1.7977e+308)。 function re=Dijkstra(ma)

图论问题

图论〔Graph Theory〕是数学的一个分支。它以图为研究对象。图论中的图是由若干给定的点及连接两点的线所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系,用点代表事物,用连接两点的线表示相应两个事物间具有这种关系。 图论与数学的关系 图论本身是应用数学的一部份,因此,历史上图论曾经被好多位数学家各自独立地建立过。关于图论的文字记载最早出现在欧拉1736年的论著中,他所考虑的原始问题有很强的实际背景。 图论的起源 图论起源于著名的柯尼斯堡七桥问题。在柯尼斯堡的普莱格尔河上有七座桥将河中的岛及岛与河岸联结起来 问题是要从这四块陆地中任何一块开始,通过每一座桥正好一次,再回到起点。然而无数次的尝试都没有成功。欧拉在1736年解决了这个问题,他用抽像分析法将这个问题化为第一个图论问题:即把每一块陆地用一个点来代替,将每一座桥用联接相应的两个点的一条线来代替,从而相当于得到一个“图”(如下图)。 欧拉证明了这个问题没有解,并且推广了这个问题,给出了对于一个给定的图可以某种方式走遍的判定法则。这就是后

来的欧拉路径和欧拉回路。这项工作使欧拉成为图论〔及拓扑学〕的创始人。 汉密尔顿的游戏与图论 1859年,英国数学家汉密尔顿发明了一种游戏:用一个规则的实心十二面体,它的20个顶点标出世界著名的20个城市,要求游戏者找一条沿着各边通过每个顶点刚好一次的闭回路,即“绕行世界”。用图论的语言来说,游戏的目的是在十二面体的图中找出一个生成圈。这个生成圈后来被称为汉密尔顿回路。这个问题后来就叫做汉密尔顿问题。由于运筹学、计算机科学和编码理论中的很多问题都可以化为汉密尔顿问题,从而引起广泛的注意和研究。 四色猜想 在图论的历史中,还有一个最著名的问题--四色猜想。这个猜想说,在一个平面或球面上的任何地图能够只用四种颜色来着色,使得没有两个相邻的国家有相同的颜色。每个国家必须由一个单连通域构成,而两个国家相邻是指它们有一段公共的边界,而不仅仅只有一个公共点。这一问题最早于1852年由Francis Guthrie提出,最早的文字记载则现于德摩根于同一年写给哈密顿的信上。包括凯莱、肯普等在内的许多人都曾给出过错误的证明。泰特(Tait)、希伍德(Heawood)、拉姆齐和哈德维格(Hadwiger)对此问题的研究与推广引发了对嵌入具有不同亏格的曲面的图的着色问题的研究。一百多年后,四色问题仍未解决。1969年,Heinrich Heesch发表了一

maab图论程序算法大全

图论算法m a t l a b实现求最小费用最大流算法的 MATLAB 程序代码如下: n=5;C=[0 15 16 0 0 0 0 0 13 14 0 11 0 17 0 0 0 0 0 8 0 0 0 0 0]; %弧容量 b=[0 4 1 0 0 0 0 0 6 1 0 2 0 3 0 0 0 0 0 2 0 0 0 0 0]; %弧上单位流量的费用 wf=0;wf0=Inf; %wf 表示最大流量, wf0 表示预定的流量值 for(i=1:n)for(j=1:n)f(i,j)=0;end;end %取初始可行流f 为零流 while(1)

for(i=1:n)for(j=1:n)if(j~=i)a(i,j)=Inf;end;end;end%构造有向赋权图 for(i=1:n)for(j=1:n)if(C(i,j)>0&f(i,j)==0)a(i,j)=b(i,j); elseif(C(i,j)>0&f(i,j)==C(i,j))a(j,i)=-b(i,j); elseif(C(i,j)>0)a(i,j)=b(i,j);a(j,i)=-b(i,j);end;end;end for(i=2:n)p(i)=Inf;s(i)=i;end %用Ford 算法求最短路, 赋初值 for(k=1:n)pd=1; %求有向赋权图中vs 到vt 的最短路 for(i=2:n)for(j=1:n)if(p(i)>p(j)+a(j,i))p(i)=p(j)+a(j,i);s(i)=j;pd=0;end;end;e nd if(pd)break;end;end %求最短路的Ford 算法结束 if(p(n)==Inf)break;end %不存在vs 到vt 的最短路, 算法终止. 注意在求最小费用最大流时构造有 向赋权图中不会含负权回路, 所以不会出现k=n dvt=Inf;t=n; %进入调整过程, dvt 表示调整量 while(1) %计算调整量 if(a(s(t),t)>0)dvtt=C(s(t),t)-f(s(t),t); %前向弧调整量 elseif(a(s(t),t)<0)dvtt=f(t,s(t));end %后向弧调整量

matlab图论程序算法大全

精心整理 图论算法matlab实现 求最小费用最大流算法的 MATLAB 程序代码如下: n=5;C=[0 15 16 0 0 0 0 0 13 14 for while for for(i=1:n)for(j=1:n)if(C(i,j)>0&f(i,j)==0)a(i,j)=b(i,j); elseif(C(i,j)>0&f(i,j)==C(i,j))a(j,i)=-b(i,j); elseif(C(i,j)>0)a(i,j)=b(i,j);a(j,i)=-b(i,j);end;end;end for(i=2:n)p(i)=Inf;s(i)=i;end %用Ford 算法求最短路, 赋初值 for(k=1:n)pd=1; %求有向赋权图中vs 到vt 的最短路

for(i=2:n)for(j=1:n)if(p(i)>p(j)+a(j,i))p(i)=p(j)+a(j,i);s(i)=j;pd=0;end ;end;end if(pd)break;end;end %求最短路的Ford 算法结束 if(p(n)==Inf)break;end %不存在vs 到vt 的最短路, 算法终止. 注意在求最小费用最大流时构造有 while if elseif if if pd=0; 值 t=n; if elseif if(s(t)==1)break;end %当t 的标号为vs 时, 终止调整过程 t=s(t);end if(pd)break;end%如果最大流量达到预定的流量值 wf=0; for(j=1:n)wf=wf+f(1,j);end;end %计算最大流量 zwf=0;for(i=1:n)for(j=1:n)zwf=zwf+b(i,j)*f(i,j);end;end%计算最小费用

图论及其算法

《图论及其算法》 --最短路问题 学院:通信学院 姓名:周旋 学号: S110131133 指导老师:陈六新

摘要 图论是数学的一个分支,它以图为研究对象。图论中的图是由若干给定的点及连接两点的线所构成的图形,这些图形通常用来描述某些事物之间的特定关系,用点代表事物,用连接两点的线表示相应两个事物间具有的关系。通过对《图论及其应用》中最短路问题的深入学习,本文利用Dijkstra算法来解决日常生活中寻找最短路的问题。同时也是对本学期学习知识的巩固。 关键词:最短路径 Dijkstra算法迭代

Abstract Graph theory is a branch of mathematics, it studies the object of picture. Graph theory graph is given by the number of points and lines connecting the two points of the graphic form. These graphics are often used to describe a specific relationship between certain things. And with the point on behalf of things, with the line connecting the two points that have a corresponding relationship between two things. Through the "Graph Theory and Its Applications," in-depth study of the shortest path problem. In this paper, we use The Dijkstra's algorithm not only to solve everyday life to find the shortest path problem, but also for the consolidation of the semester to learn the knowledge. Keyword: shortest path Dijkstra's algorithm Iteration

图论经典问题

常见问题: 1、图论的历史 图论以图为研究对象的数学分支。图论中的图指的是一些点以及连接这些点的线的总体。通常用点代表事物,用连接两点的线代表事物间的关系。图论则是研究事物对象在上述表示法中具有的特征与性质的学科。 在自然界和人类社会的实际生活中,用图形来描述和表示某些事物之间的关系既方便又直观。例如,国家用点表示,有外交关系的国家用线连接代表这两个国家的点,于是世界各国之间的外交关系就被一个图形描述出来了。另外我们常用工艺流程图来描述某项工程中各工序之间的先后关系,用网络图来描述某通讯系统中各通讯站之间信息传递关系,用开关电路图来描述IC中各元件电路导线连接关系等等。 事实上,任何一个包含了某种二元关系的系统都可以用图形来模拟。由于我们感兴趣的是两对象之间是否有某种特定关系,所以图形中两点之间连接与否最重要,而连接线的曲直长短则无关紧要。由此经数学抽象产生了图的概念。研究图的基本概念和性质、图的理论及其应用构成了图论的主要内容。 图论的产生和发展经历了二百多年的历史,大体上可分为三个阶段: 第一阶段是从1736年到19世纪中叶。当时的图论问题是盛行的迷宫问题和游戏问题。最有代表性的工作是著名数学家L.Euler于1736年解决的哥尼斯堡七桥问题(Konigsberg Seven Bridges Problem)。 东普鲁士的哥尼斯堡城(现今是俄罗斯的加里宁格勒,在波罗的海南岸)位于普雷格尔(Pregel)河的两岸,河中有一个岛,于是城市被河的分支和岛分成了四个部分,各部分通过7座桥彼此相通。如同德国其他城市的居民一样,该城的居民喜欢在星期日绕城散步。于是产生了这样一个问题:从四部分陆地任一块出发,按什么样的路线能做到每座桥经过一次且仅一次返回出发点。这就是有名的哥尼斯堡七桥问题。 哥尼斯堡七桥问题看起来不复杂,因此立刻吸引所有人的注意,但是实际上很难解决。 瑞士数学家(Leonhard Euler)在1736年发表的“哥尼斯堡七桥问题”的文章中解决了这个问题。这篇论文被公认为是图论历史上的第一篇论文,Euler也因此被誉为图论之父。 欧拉把七桥问题抽象成数学问题---一笔画问题,并给出一笔画问题的判别准则,从而判定七桥问题不存在解。Euler是这样解决这个问题的:将四块陆地表示成四个点,桥看成是对应结点之间的连线,则哥尼斯堡七桥问题就变成了:从A,B,C,D任一点出发,通过每边一次且仅一次返回原出发点的路线(回路)是否存在?Euler证明这样的回路是不存在的。 第二阶段是从19世纪中叶到1936年。图论主要研究一些游戏问题:迷宫问题、博弈问题、棋盘上马的行走线路问题。一些图论中的著名问题如四色问题(1852年)和Hamilton环游世界问题(1856年)也大量出现。同时出现了以图为工具去解决其它领域中一些问题的成果。1847年德国的克希霍夫(G.R.Kirchoff)将树

数学竞赛中的图论问题

数学竞赛中的图论问题

分类号密级 U D C 编号 本科毕业论文(设计) 题目数学竞赛中的图论问题 所在院系数学与数量经济学院 专业名称数学与应用数学 年级 08级 学生姓名李曼 学号 0850410013 指导教师孙静

二 0一二年三月 学位论文原创性声明 本人郑重声明:所呈交的论文是本人在孙静老师的指导下独立进行研究所取得的研究成果. 除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品.本人完全意识到本声明的法律后果由本人承担. 作者:

日期:2012年3月29日 文献综述 一综述 在18世纪30年代,一个非常有趣的问题引起了欧洲数学家的浓厚兴趣,这个问题就是著名的哥尼斯堡七桥问题,即要求遍历哥尼斯堡七桥中的每一座桥恰好一次后回到出发点. 欧拉证明这是不可能完成的. 此后,欧拉发表了著名的论文《依据集合位置的阶梯方法》,这是图论领域的第一篇论文,标志着图论的诞生. 图论的真正发展始于20世纪五六十年代之间,是一门既古老又年轻的学科. 图论极有趣味性,严格来讲,它是组合数学的一个重要分支. 虽然图论只是研究点和线的学科,但是它的应用领域十分广泛,不仅局限于数学和计算机学科,还涵盖了社会学、交通管理等. 总的来说,图论这门科学具有以下特点:(1)图论蕴含了丰富的思想、漂亮的图形和巧妙的证明; (2)涉及的问题多且广泛,问题表明上简单朴素,本质上却十分深刻复杂; (3)解决问题的方法千变万化,非常灵活,常常是一种问题一种解法. 由以上三个特点可以看出,图论与其他的数学分支不同,它不像群论、拓扑等学科那样有一套完整的体系和解决问题的系统. 而且图论所研究的内容非常广泛,如图的连通性、遍历性、图的着色、图的可平面性等等. 二内容 由于图论具有蕴含了丰富的思想、漂亮的图形和巧妙的证明,涉及的问题多且广泛,问题表面上简单朴素,本质上却十分深刻复杂,解决问题的方法千变万化,非常灵活,常常是一种问题一种解法的特点. 随着数学竞赛越来越规范化,并且越来越考察考生的灵活运用知识的能力. 因此近年来,图论问题频繁的出现在数学竞赛中,如典型的一笔画问题、中国邮递员问题、旅游推销员问题、排课表问题等.

离散数学图论部分经典精彩试题及问题详解

离散数学图论部分综合练习 一、单项选择题 1.设图G 的邻接矩阵为 ??? ???? ? ????? ???0101 010******* 11100100110 则G 的边数为( ). A .6 B .5 C .4 D .3 2.已知图G 的邻接矩阵为 , 则G 有( ). A .5点,8边 B .6点,7边 C .6点,8边 D .5点,7边 3.设图G =,则下列结论成立的是 ( ). A .deg(V )=2∣E ∣ B .deg(V )=∣E ∣ C .E v V v 2)deg(=∑∈ D .E v V v =∑∈)deg( 4.图G 如图一所示,以下说法正确的是 ( ) . A .{(a , d )}是割边 B .{(a , d )}是边割集 C .{(d , e )}是边割集 D .{(a, d ) ,(a, c )}是边割集 5.如图二所示,以下说法正确的是 ( ). A .e 是割点 B .{a, e }是点割集 C .{b , e }是点割集 D .{d }是点割集 6.如图三所示,以下说法正确的是 ( ) . A .{(a, e )}是割边 B .{(a, e )}是边割集 C .{(a, e ) ,(b, c )}是边割集 D .{(d , e )}是边割集 ο ο ο ο ο c a b e d ο f 图一 图二

图三 7.设有向图(a )、(b )、(c )与(d )如图四所示,则下列结论成立的是 ( ). 图四 A .(a )是强连通的 B .(b )是强连通的 C .(c )是强连通的 D .(d )是强连通的 应该填写:D 8.设完全图K n 有n 个结点(n ≥2),m 条边,当( )时,K n 中存在欧拉回路. A .m 为奇数 B .n 为偶数 C .n 为奇数 D .m 为偶数 9.设G 是连通平面图,有v 个结点,e 条边,r 个面,则r = ( ). A .e -v +2 B .v +e -2 C .e -v -2 D .e +v +2 10.无向图G 存在欧拉通路,当且仅当( ). A .G 中所有结点的度数全为偶数 B .G 中至多有两个奇数度结点 C .G 连通且所有结点的度数全为偶数 D .G 连通且至多有两个奇数度结点 11.设G 是有n 个结点,m 条边的连通图,必须删去G 的( )条边,才能确定G 的一棵生成树. A .1m n -+ B .m n - C .1m n ++ D .1n m -+ 12.无向简单图G 是棵树,当且仅当( ). A .G 连通且边数比结点数少1 B .G 连通且结点数比边数少1 C .G 的边数比结点数少1 D .G 中没有回路. 二、填空题 1.已知图G 中有1个1度结点,2个2度结点,3个3度结点,4个4度结 点,则G 的边数是 . 2.设给定图G (如图四所示),则图G 的点割 ο ο ο ο c a b f

图论的发展及其在现实生活中的几个应用

图论的发展及其在生活中的应用 数学与应用数学张佳丽 指导教师刘秀丽 摘要主要介绍了图论的起源与发展及其生活中的若干应用,如:渡河问题、旅游推销员问题、最小生成树问题、四色问题、安排问题、中国邮递员问题。同时也涉及到了几种在图论中应用比较广泛的方法,如:最邻近法、求最小生成树的方法、求最优路线的方法等。 关键词图论生活问题应用 Graph Theory Development and the Application in Life Mathematics and applied mathematics Zhang Jiali Tutor Liu Xiuli Abstract This paper mainly introduces the origin and development of graph theory and its several applications in our life, such as: crossing river problem, traveling salesman problem, minimum spanning tree problem, four color problem,arrangement problem,Chinese postman problem.It also researches several methods that are more widely applied in graph theory, for example: the method of most neighboring, the method of solving the minimum spanning tree,the method of the best route,and so on. Key words graph theory life problem application 引言 图论是一门古老的学科,是数学中有广泛应用的一个分支,与其他的数学分支,如群论、矩阵论、概率论、拓扑学、数分析等有着密切的联系.图论中以图为研究对象,图形中我们用点表示对象,两点之间的连线表示对象之间的某种特定的关系.事实上,任何一个包含了二元关系的系统都可以用图论来模拟.而且,图论能把纷杂的信息变的有序、直观、清晰.由于我们感兴趣的是两对象之间是否有某种特定关系,所以图形中两点间连接与否尤为重要,而图形的位置、大小、形状及连接线的曲直长短则无关紧要.图论在自然科学、社会科学等各个领域都有广泛的应用.随着科学的发展,以及生产管理、军事、交通运输等方面提出了大量实际的需要,图论的理论及其应用研究得到飞速发展。从20世纪50年代以后,由于计算机的迅速发展,有力地推动了图论的发展,加速了图论向各个学科的渗透,尤其是网络理论的建立,图论与线性规划、动态规划等优化理论和方法互相渗透。同时,计算机的发展使图论成为数学领域中发展最快的分支

算法图论

算法图论(Graph Theoretic Algorithms) 第一部分:区间图、弦图、相似图、完美图 本书英文版共29讲,第一部分共12讲,系译者学习的同时为备以后查阅复习之便作的翻译,内容基本忠实于原著,且大部分是直译,同时加入了译者的少许想法,并补上了少部分略去的证明过程(限于译者的水平只能证明一些力所能及的证明)。 第1讲是概论导读;第2到10讲比较详细地介绍了区间图、弦图及其相关的性质、算法(包括证明)以及延伸内容,其中第7到9讲涉及相似图的一些内容,部分定理尚未证明;第11、12讲介绍完美图、相交图及其部分特例,侧重于介绍性,概念结论较多但证明较少,可以作为知识性的阅读。 《尚为解决的问题》是译者翻译学习过程中遇到的一些不懂的问题,原文中未给出详细证明,而译者目前还无法自己证明的,这些在译文中将用粗括号扩出。各路高手如有知道方法的情与译者联系,不胜感激! 复旦附中葛潇

第一讲、概论 本讲对这门课程的主要议题进行了大致的介绍。 1.概念 这门课程涉及了一些特殊的图以及这些图上某些已经得到改进及仍未解决的问题。 为了解我们所说的内容,我们必须回顾一些特殊图中的概念、算法、复杂度分析及NP —HARD问题。在这门课中对些将不作深入,我们假设读者以对这些有所了解。 2.一些图的分类 下面我们将给出这门课程中将涉及的一些图的形式。在以后的各讲中将进行深入的分析。 z区间图(Interval graphs):如果一个图能用一些区间的intersection graph表示,那么这个图称为区间图。更准确地说,给定一系列区间,将其中每个区间看作一个顶点,两个顶点间有边,当且仅当这两个点所代表的区间相交。一个图是区间图,当且仅当它能通过以上方法构造出来。(见图1) 图1:一些区间及它们所构成的区间图 我们同时学习各种相关的图,例如弦图和完美图。这部分的主要参考是[Gol80]。 z树(Trees):一个图是一颗树,当且仅当它是连通的,并且没有环。我们将同样学习有关的图,例如partial k-trees. 这部分的主要参考是[Bod93]。 z平面图(Planar graphs):一个图如果能画在二维平面上,且各边没有交点,则该图称为平面图。注意每个树都是平面图,但反之却不一定。我们将同样学习有关的图,例如outer-planar graphs 和 series-parallel graphs(混联图)。这部分的主要参考是[NC88]。 本课程中除特别说明,一般所指的图都是简单的、连通的,且至少有两个顶点(或是图有意义的最少顶点)。显然这不会影响大多数算法的适用性。 同时,一般给出的图都是无向图,虽然有时我们为了设计算法人为地加上方向。 3.一些问题 下面是我们将学习的一些问题,以及它们在一些特殊图上的复杂度。 z最大独立集(Maximum Independent Set):这是著名的NP难题。但在区间图中,最大独立集问题能够在O(N+M)时间内解决,同时在树上可以在线性时间内解决,但对于平面图这仍是NP难题。 z最大割(Maximum Cut):图G=(V,E)上的一个割将该图的顶点分成两个子集:V=A+B。更准确地说,给定一种顶点划分,一个割是哪些一个端点在A中,另一个在B 中的边组成的集合。最大割问题是寻找一种顶点划分方式,使得对应割集中的边数最多。 同样也有最小割问题。最小割问题用最大流的方法可以在多项式时间内解决,但最大割问题是NP难题。但在平面图上最大割问题是多项式级的;在树上,最大割问题是平凡

图论算法实例

1、最优连线问题 (最优连线问题)我国西部的SV地区共有1个城市(标记为1)和9个乡镇(标记为2--10)组成,该地区不久将用上天然气,其中城市1含有井源.现要设计一供气系统,使得从城市1到每个乡镇(2--10)都有一条管道相边,并且铺设的管子的量尽可能的少.图7-9给出了SV 地区的地理位置图,表7-7给出了城镇之间的距离. Lingo程序如下:model: data: n=10; enddata sets: cities/1..n/: F; roads(cities,cities)/ 1,2 1,3 2,4 2,5 2,6 3,4 3,5 3,6 4,7 4,8 5,7 5,8 5,9 6,8 6,9 7,10 8,10 9,10 /: D, P; endsets data: D= 6 5 3 6 9 7 5 11 9 1 8 7 5 4 10 5

9; enddata F(n)=0; @for(cities(i) | i #lt# n: F(i)=@min(roads(i,j): D(i,j)+F(j)); ); @for(roads(i,j): P(i,j)=@if(F(i) #eq# D(i,j)+F(j),1,0) ); end 结果: 2、任意两点间的最短路程问题: 某公司在六个城市c1, …,c6中有分公司,从ci到cj的直接航程票价记在下述矩阵中的(i,j) 位置上。(∞表示无直接航路),请帮助该公司设计一张任意两城 市间的票价最便宜的路线表。 0 50 ∞40 25 10 50 0 15 20 ∞25 ∞15 0 10 20 ∞ 25 ∞20 10 0 55 10 25 ∞25 55 0 Lingo程序如下:

图论问题选讲

图 论 大连市第二十四中学 邰海峰 重要的概念与定理 完全图 每两个顶点之间均有边相连的简单图称为完全图,有n 个顶点的完全图(n 阶完全图)记为n K . 顶点的度 图G 中与顶点v 相关联的边数(环按2条边计算)称为顶点v 的度(或次数),记为()d v .()G δ与()G ?分别表示图G 的顶点的最小度与最大度.度为奇数的顶点称为奇顶点,度为偶数的顶点称为偶顶点. 树 没有圈的连通图称为树,用T 表示,其中度为1的顶点称为树叶(或悬挂点).n 阶树常表示为n T . k 部图 若图G 的顶点集V 可以分解为k 个两两不相交的非空子集的并,即 1,()k i i j i V V V V i j == =?≠ 并且同一子集i V (1,2,,)i k =内任何两个顶点没有边相连,则称这样的图为k 部图,记作12(,,,;)k G V V V E =. 2部图又叫做偶图,记为(,;)G X Y E =. 完全k 部图 在一个k 部图12(,, ,;)k G V V V E =中,i i V m =(1,2,,)i k =,若对任意,,(,,1,2,,)i i j j v V v V i j i j k ∈∈≠=均有边连接i v 和j v ,则称图G 为完全k 部图,记为12,,,k m m m K . 欧拉迹 包含图中所有边的迹称为欧拉迹.起点与终点重合的欧拉迹称为闭欧拉迹. 欧拉图 包含欧拉迹的图为欧拉图. 欧拉图必是连通图. 哈密顿链(圈) 经过图上各顶点一次并且仅仅一次的链(圈)称为哈密顿链(圈).包含哈密顿圈的图称为哈密顿图. 平面图 若一个图G 可画在平面上,即可作一个与G 同构的图G ',使G '的顶点与边在同一平面内,且任意两边仅在端点相交,则图G 称为平面图. 一个平面图的顶点和边把一个平面分成若干个互相隔开的区域,称为平面图的一个面,在所有边的外面的面称为外部面,其余的称为内部面. 竞赛图 有向完全简单图称为竞赛图.有n 个顶点的竞赛图记作n K . 有向路 在有向图(,)D V U =中,一个由不同的弧组成的序列12,, ,n u u u ,其中i u 的起点为i v ,终点为1(1,2,,)i v i n +=,称这个序列为从1v 到1n v +的有向路(简称路),n 为这个路的长,1v 为路的起点,1n v +为路的终点.若11n v v +=,则称这个路为回路.

图论中的概念及重要算法

图论中的概念及重要算法 常州一中林厚从 chi、图论中的基本概念 一、图的概念 简单讲,一个图是由一些点和这些点之间的连线组成的。严格意义讲,图是一种数据结构,定义为:graph= (V,E), V是点(称为"顶点”)的非空有限集合,E是线(称为"边”)的集合,边一般用(V x,V y)表示,其中V x,V y属于V。 图(A)共有 4 个顶点、5 条边,表示为:V={v i, V2, V3, V4},E={(V i,V2),(V i,V3), (V i,V4),(V2,V3),(V2,V4)} 二、无向图和有向图 如果边是没有方向的,称此图为“无向图” ,如图(A)和图(C),用一对圆括号表示无向边,如图(A)中的边(V i,V2),显然(V x,▼『)和(V y,V x)是两条等价的边,所以在上面E 的集合中没有再出现边(V2,V i)。 如果边是有方向(带箭头)的,则称此图为“有向图”,如图(B),用一对尖括号表示有向边,如图(B)中的边<V i,V2>。把边<v x,v y>中V称为起点,v y称为终点。显然此时边w,V y>与边<V y,V x>是不同的两条边。有向图中的边又称为弧,起点称为弧头,终点称为弧尾。 图(B)表示为:V={V i,V2,V3},E={<V i,V2>,<V i,V3>,< V2,V3>,<V3,V2>} 如果两个顶点U V之间有一条边相连,则称U V这两个顶点是关联的。 三、带权图 一个图中的两顶点间不仅是关联的,而且在边上还标明了数量关系,如图(C),这种数量关系可能是距离、费用、时间、电阻等等,这些数值称为相应边的权。边上带有权的图称为带权图,也称为网(络)。 四、阶 图中顶点的个数称为图的阶。图(A)、图(B)、图(C)的阶分别为4、3、5。 五、度 图中与某个顶点相关联的边的数目,称为该顶点的度。度为奇数的顶点称为奇点,度为偶数的顶点称为偶点。图(A)中顶点V i,V2是奇点,V3,V4是偶点。

相关文档
最新文档