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

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

图与网络模型及方法

§1 概论

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

图论中所谓的“图”是指某类具体事物和这些事物之间的联系。如果我们用点表示这些具体事物,用连接两点的线段(直的或曲的)表示两个事物的特定的联系,就得到了描述这个“图”的几何形象。图论为任何一个包含了一种二元关系的离散系统提供了一个数学模型,借助于图论的概念、理论和方法,可以对该模型求解。哥尼斯堡七桥问题就是一个典型的例子。在哥尼斯堡有七座桥将普莱格尔河中的两个岛及岛与河岸联结起来问题是要从这四块陆地中的任何一块开始通过每一座桥正好一次,再回到起点。当

然可以通过试验去尝试解决这个问题,但该城居民的任何尝试均未成功。欧拉为了解决

这个问题,采用了建立数学模型的方法。他将每一块陆地用一个点来代替,将每一座桥用连接相应两点的一条线来代替,从而得到一个有四个“点”,七条“线”的“图”。问题成为从任一点出发一笔画出七条线再回到起点。欧拉考察了一般一笔画的结构特点,给出了一笔画的一个判定法则:这个图是连通的,且每个点都与偶数线相关联,将这个判定法则应用于七桥问题,得到了“不可能走通”的结果,不但彻底解决了这个问题,而且开创了图论研究的先河。

图与网络是运筹学(Operations Research )中的一个经典和重要的分支,所研究的问题涉及经济管理、工业工程、交通运输、计算机科学与信息技术、通讯与网络技术等诸多领域。下面将要讨论的最短路问题、最大流问题、最小费用流问题和匹配问题等都是图与网络的基本问题。

我们首先通过一些例子来了解网络优化问题。

例1 最短路问题(SPP -shortest path problem )

一名货柜车司机奉命在最短的时间内将一车货物从甲地运往乙地。从甲地到乙地的公路网纵横交错,因此有多种行车路线,这名司机应选择哪条线路呢?假设货柜车的运行速度是恒定的,那么这一问题相当于需要找到一条从甲地到乙地的最短路。 例2 公路连接问题

某一地区有若干个主要城市,现准备修建高速公路把这些城市连接起来,使得从其中任何一个城市都可以经高速公路直接或间接到达另一个城市。假定已经知道了任意两

个城市之间修建高速公路的成本,那么应如何决定在哪些城市间修建高速公路,使得总成本最小?

例3 指派问题(assignment problem )

一家公司经理准备安排N 名员工去完成N 项任务,每人一项。由于各员工的特点不同,不同的员工去完成同一项任务时所获得的回报是不同的。如何分配工作方案可以使总回报最大?

例4 中国邮递员问题(CPP -chinese postman problem )

一名邮递员负责投递某个街区的邮件。如何为他(她)设计一条最短的投递路线(从邮局出发,经过投递区内每条街道至少一次,最后返回邮局)?由于这一问题是我国管梅谷教授1960年首先提出的,所以国际上称之为中国邮递员问题。

例5 旅行商问题(TSP -traveling salesman problem )

一名推销员准备前往若干城市推销产品。如何为他(她)设计一条最短的旅行路线(从驻地出发,经过每个城市恰好一次,最后返回驻地)?这一问题的研究历史十分悠久,通常称之为旅行商问题。

例6 运输问题(transportation problem )

某种原材料有M 个产地,现在需要将原材料从产地运往N 个使用这些原材料的工厂。假定M 个产地的产量和N 家工厂的需要量已知,单位产品从任一产地到任一工厂的运费已知,那么如何安排运输方案可以使总运输成本最低?

上述问题有两个共同的特点:一是它们的目的都是从若干可能的安排或方案中寻求某种意义下的最优安排或方案,数学上把这种问题称为最优化或优化(optimization )问题;二是它们都易于用图形的形式直观地描述和表达,数学上把这种与图相关的结构称为网络(network )。与图和网络相关的最优化问题就是网络最优化或称网络优化 (netwok optimization )问题。所以上面例子中介绍的问题都是网络优化问题。由于多数网络优化问题是以网络上的流(flow )为研究的对象,因此网络优化又常常被称为网络流(network flows )或网络流规划等。

下面首先简要介绍图与网络的一些基本概念。

§2 图与网络的基本概念

2.1 无向图

一个无向图(undirected graph)G 是由一个非空有限集合)(G V 和)(G V 中某些元素的无序对集合)(G E 构成的二元组,记为))(),((G E G V G =。其中

},,,{)(21n v v v G V =称为图G 的顶点集(vertex set )或节点集(node set )

, )(G V 中的每一个元素),,2,1(n i v i =称为该图的一个顶点(vertex )或节点(node );

},,,{)(21m e e e G E =称为图G 的边集

(edge set ),)(G E 中的每一个元素k e (即)(G V 中某两个元素j i v v ,的无序对) 记为),(j i k v v e =或i j j i k v v v v e == ),,2,1(m k =,被称为该图的一条从i v 到j v 的边(edge )。

当边j i k v v e =时,称j i v v ,为边k e 的端点,并称j v 与i v 相邻(adjacent );边k e 称为与顶点j i v v ,关联(incident )。如果某两条边至少有一个公共端点,则称这两条边在图G 中相邻。

边上赋权的无向图称为赋权无向图或无向网络(undirected network )。我们对图和网络不作严格区分,因为任何图总是可以赋权的。

一个图称为有限图,如果它的顶点集和边集都有限。图G 的顶点数用符号||V 或

)(G ν表示,边数用||E 或)(G ε表示。

当讨论的图只有一个时,总是用G 来表示这个图。从而在图论符号中我们常略去字母G ,例如,分别用ν,,E V 和ε代替)(),(),(G G E G V ν和)(G ε。

端点重合为一点的边称为环(loop)。

一个图称为简单图(simple graph),如果它既没有环也没有两条边连接同一对顶点。

2.2 有向图

定义 一个有向图(directed graph 或 digraph )G 是由一个非空有限集合V 和V 中某些元素的有序对集合A 构成的二元组,记为),(A V G =。其中},,,{21n v v v V =称为图G 的顶点集或节点集, V 中的每一个元素),,2,1(n i v i =称为该图的一个顶点或节点;},,,{21m a a a A =称为图G 的弧集(arc set ),A 中的每一个元素k a (即V 中某两个元素j i v v ,的有序对) 记为),(j i k v v a =或),,2,1(n k v v a j i k ==,被称为该图的一条从i v 到j v 的弧(arc )。

当弧j i k v v a =时,称i v 为k a 的尾(tail ),j v 为k a 的头(head ),并称弧k a 为i v 的出弧(outgoing arc ),为j v 的入弧(incoming arc )。

对应于每个有向图D ,可以在相同顶点集上作一个图G ,使得对于D 的每条弧,G 有一条有相同端点的边与之相对应。这个图称为D 的基础图。反之,给定任意图G ,对于它的每个边,给其端点指定一个顺序,从而确定一条弧,由此得到一个有向图,这样的有向图称为G 的一个定向图。

以下若未指明“有向图”三字,“图”字皆指无向图。

2.3 完全图、二分图

每一对不同的顶点都有一条边相连的简单图称为完全图(complete graph)。n 个顶点的完全图记为n K 。

若Y X G V =)(,Φ=Y X ,0||||≠Y X (这里||X 表示集合X 中的元素个数),X 中无相邻顶点对,Y 中亦然,则称G 为二分图(bipartite graph);特别地,若Y y X x ∈?∈?,,则)(G E xy ∈,则称G 为完全二分图,记成|||,|Y X K 。

2.4 子图

图H 叫做图G 的子图(subgraph ),记作G H ?,如果)()(G V H V ?,)()(G E H E ?。若H 是G 的子图,则G 称为H 的母图。

G 的支撑子图(spanning subgraph ,又成生成子图)是指满足)()(G V H V =的子图H 。

2.5 顶点的度

设)(G V v ∈,G 中与v 关联的边数(每个环算作两条边)称为v 的度(degree),记作)(v d 。若)(v d 是奇数,称v 是奇顶点(odd point);)(v d 是偶数,称v 是偶顶点(even point)。关于顶点的度,我们有如下结果:

(i) ∑∈=V

v v d ε2)(

(ii) 任意一个图的奇顶点的个数是偶数。

2.6 图与网络的数据结构

网络优化研究的是网络上的各种优化模型与算法.为了在计算机上实现网络优化的

算法,首先我们必须有一种方法(即数据结构)在计算机上来描述图与网络。一般来说,算法的好坏与网络的具体表示方法,以及中间结果的操作方案是有关系的。这里我们介绍计算机上用来描述图与网络的5种常用表示方法:邻接矩阵表示法、关联矩阵表示法、弧表表示法、邻接表表示法和星形表示法。在下面数据结构的讨论中,我们首先假设

),(A V G =是一个简单有向图,m A n V ==||,||,

并假设V 中的顶点用自然数n ,,2,1 表示或编号,A 中的弧用自然数m ,,2,1 表示或编号。对于有多重边或无向网络的情况,我们只是在讨论完简单有向图的表示方法之后,给出一些说明。

(i )邻接矩阵表示法

邻接矩阵表示法是将图以邻接矩阵(adjacency matrix )的形式存储在计算机中。图),(A V G =的邻接矩阵是如下定义的:C 是一个n n ?的10-矩阵,即

n n n n ij c C ??∈=}1,0{)(,

?

???∈=.),(,0,),(,1A j i A j i c ij 也就是说,如果两节点之间有一条弧,则邻接矩阵中对应的元素为1;否则为0。可以看出,这种表示法非常简单、直接。但是,在邻接矩阵的所有2

n 个元素中,只有m 个为非零元。如果网络比较稀疏,这种表示法浪费大量的存储空间,从而增加了在网络中查找弧的时间。

例7 对于右图所示的图,可以用邻接矩阵表示为 ???????

?????????0110010100

000100100000110 同样,对于网络中的权,也可以用类似邻接矩阵的n n ?矩阵表示。只是此时一条弧所对应的元素不再是1,而是相应的权而已。如果网络中每条弧赋有多种权,则可以用多个矩阵表示这些权。

(ii )关联矩阵表示法

关联矩阵表示法是将图以关联矩阵(incidence matrix )的形式存储在计算机中.图),(A V G =的关联矩阵B 是如下定义的:B 是一个m n ?的矩阵,即

m n m n ik b B ??-∈=}1,0,1{)(,

?????∈=∈?-∈=∈?=.,0,

),(, ,1,),(,,1其它A i j k V j A j i k V j b ik

也就是说,在关联矩阵中,每行对应于图的一个节点,每列对应于图的一条弧。如果一个节点是一条弧的起点,则关联矩阵中对应的元素为1;如果一个节点是一条弧的终点,则关联矩阵中对应的元素为1-;如果一个节点与一条弧不关联,则关联矩阵中对应的元素为0。对于简单图,关联矩阵每列只含有两个非零元(一个1+,一个1-)。可以看出,这种表示法也非常简单、直接。但是,在关联矩阵的所有nm 个元素中,只有m 2

个为非零元。如果网络比较稀疏,这种表示法也会浪费大量的存储空间。但由于

关联矩阵有许多特别重要的理论性质,因此它在网络优化中是非常重要的概念。

例8 对于例7所示的图,如果关联矩阵中每列对应弧的顺序为(1,2),(1,3),(2,4),(3,2),(4,3),(4,5),(5,3)和(5,4),则关联矩阵表示为

???????

?????????--------1110000010110100010110100000110100000011 同样,对于网络中的权,也可以通过对关联矩阵的扩展来表示。例如,如果网络中每条弧有一个权,我们可以把关联矩阵增加一行,把每一条弧所对应的权存储在增加的行中。如果网络中每条弧赋有多个权,我们可以把关联矩阵增加相应的行数,把每一条弧所对应的权存储在增加的行中。

(iii )弧表示法

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

为了便于检索,一般按照起点、终点的字典序顺序存储弧表,如上面的弧表就是按照这样的顺序存储的。

(iv )邻接表表示法

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

这是一个5维指针数组,每一维(上面表示法中的每一行)对应于一个节点的邻接

表,如第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。

对于有向图),(A V G =,一般用)(i A 表示节点i 的邻接表,即节点i 的所有出弧构成的集合或链表(实际上只需要列出弧的另一个端点,即弧的头)。例如上面例子,}3,2{)1(=A ,}4,3{)5(=A 等。这种记法我们在本书后面将会经常用到。

(v )星形表示法

星形(star )表示法的思想与邻接表表示法的思想有一定的相似之处。对每个节点,它也是记录从该节点出发的所有弧,但它不是采用单向链表而是采用一个单一的数组表示。也就是说,在该数组中首先存放从节点1出发的所有弧,然后接着存放从节点2出发的所有孤,依此类推,最后存放从节点n 出发的所有孤。对每条弧,要依次存放其起点、终点、权的数值等有关信息。这实际上相当于对所有弧给出了一个顺序和编号,只是从同一节点出发的弧的顺序可以任意排列。此外,为了能够快速检索从每个节点出发的所有弧,我们一般还用一个数组记录每个节点出发的弧的起始地址(即弧的编号)。在这种表示法中,可以快速检索从每个节点出发的所有弧,这种星形表示法称为前向星形(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 )

在数组point 中,其元素个数比图的节点数多1(即1+n ),且一定有1)1(=point ,1)1(+=+m n point 。对于节点i ,其对应的出弧存放在弧信息数组的位置区间为

]1)1(),([-+i point i point ,

如果)1()(+=i point i point

,则节点i 没有出弧。这种表示法与弧表表示法也非常相似,“记录弧信息的数组”实际上相当于有序存放的“弧表”。只是在前向星形表示法中,弧被编号后有序存放,并增加一个数组(point )记录每个节点出发的弧的起始编号。

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

节点对应的入弧的起始地址编号数组(记为rpoint )

如果既希望快速检索每个节点的所有出弧,也希望快速检索每个节点的所有入弧,则可以综合采用前向和反向星形表示法。当然,将孤信息存放两次是没有必要的,可以只用一个数组(trace )记录一条弧在两种表示法中的对应关系即可。例如,可以在采用前向星形表示法的基础上,加上上面介绍的rpoint 数组和如下的trace 数组即可。这相当于一种紧凑的双向星形表示法如下所示:

对于网络图的表示法,我们作如下说明:

① 星形表示法和邻接表表示法在实际算法实现中都是经常采用的。星形表示法的优点是占用的存储空间较少,并且对那些不提供指针类型的语言(如 FORTRAN 语言等)也容易实现。邻接表表示法对那些提供指针类型的语言(如C 语言等)是方便的,且增加或删除一条弧所需的计算工作量很少,而这一操作在星形表示法中所需的计算工作量较大(需要花费)(m O 的计算时间)。有关“计算时间”的观念是网络优化中需要考虑的一个关键因素。

② 当网络不是简单图,而是具有平行弧(即多重弧)时,显然此时邻接矩阵表示法是不能采用的。其他方法则可以很方便地推广到可以处理平行弧的情形。

③ 上述方法可以很方便地推广到可以处理无向图的情形,但由于无向图中边没有方向,因此可能需要做一些自然的修改。例如,可以在计算机中只存储邻接矩阵的一半信息(如上三角部分),因为此时邻接矩阵是对称矩阵。无向图的关联矩阵只含有元素0和1+,而不含有1-,因为此时不区分边的起点和终点。又如,在邻接表和星形表示法中,每条边会被存储两次,而且反向星形表示显然是没有必要的,等等。

2.7 轨与连通

k k v e e v e v W 2110=,其中)(G E e i ∈,k i ≤≤1,)(G V v j ∈,k j ≤≤0,i e 与i i v v ,1-关联,称W 是图G 的一条道路(walk),k 为路长,顶点0v 和k v 分别称为W 的起点和终点,而121,,,-k v v v 称为它的内部顶点。

若道路W 的边互不相同,则W 称为迹(trail)。若道路W 的顶点互不相同,则W 称为轨(path)。

称一条道路是闭的,如果它有正的长且起点和终点相同。起点和终点重合的轨叫做圈(cycle)。

若图G 的两个顶点v u ,间存在道路,则称u 和v 连通(connected)。v u ,间的最短轨的长叫做v u ,间的距离。记作),(v u d 。若图G 的任二顶点均连通,则称G 是连通图。

显然有:

(i) 图P 是一条轨的充要条件是P 是连通的,且有两个一度的顶点,其余顶点的度为2;

(ii) 图C 是一个圈的充要条件是C 是各顶点的度均为2的连通图。

§3 应用—最短路问题

3.1 两个指定顶点之间的最短路径

问题如下:给出了一个连接若干个城镇的铁路网络,在这个网络的两个指定城镇间,找一条最短铁路线。

以各城镇为图G 的顶点,两城镇间的直通铁路为图G 相应两顶点间的边,得图G 。对G 的每一边e ,赋以一个实数)(e w —直通铁路的长度,称为e 的权,得到赋权图G 。G 的子图的权是指子图的各边的权和。问题就是求赋权图G 中指定的两个顶点00,v u 间的具最小权的轨。这条轨叫做00,v u 间的最短路,它的权叫做00,v u 间的距离,亦记作),(00v u d 。

求最短路已有成熟的算法:迪克斯特拉(Dijkstra )算法,其基本思想是按距0u 从近到远为顺序,依次求得0u 到G 的各顶点的最短路和距离,直至0v (或直至G 的所有顶点),算法结束。为避免重复并保留每一步的计算信息,采用了标号算法。下面是该算法。

(i) 令0)(0=u l ,对0u v ≠,令∞=)(v l ,}{00u S =,0=i 。

(ii) 对每个i S v ∈(i i S V S \=),用

)}()(),({min uv w u l v l i

S u +∈ 代替)(v l 。计算)}({min v l i

S v ∈,把达到这个最小值的一个顶点记为1+i u ,令}{11++=i i i u S S 。

(iii). 若1||-=V i ,停止;若1||-

算法结束时,从0u 到各顶点v 的距离由v 的最后一次的标号)(v l 给出。在v 进入i S 之前的标号)(v l 叫T 标号,v 进入i S 时的标号)(v l 叫P 标号。算法就是不断修改各项点的T 标号,直至获得P 标号。若在算法运行过程中,将每一顶点获得P 标号所由来的边在图上标明,则算法结束时,0u 至各项点的最短路也在图上标示出来了。

例9 某公司在六个城市621,,,c c c 中有分公司,从i c 到j c 的直接航程票价记在下述矩阵的),(j i 位置上。(∞表示无直接航路),请帮助该公司设计一张城市1c 到其它城市间的票价最便宜的路线图。

??????????????????∞∞∞∞∞∞

055252510

55010202525100102040

2010015252015050102540500

用矩阵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)

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))); if length(index)>=2

index=index(1);

end

index2(temp)=index;

end

d, index1, index2

例、用迪克斯特拉算法求出权图中u 0 到u n 的距离d (u 0 ,~S 2)及最短路l

n

解:(1)S 0 ={ u 0},~S 0 ={ u 1 ,u 2 ,u 3,u 4 ,u 5 ,u 6 ,u 7},

∵min{1,2,∞,∞,4,8,7}=1,

∴d (u 0 ,u 1 )=1,l 1 =(u 0 ,u 1 ),| l 1|=1.

(2)S 1 ={u 0 , u 1},~S 1 ={u 2 ,u 3 ,u 4 ,u 5 ,u 6 ,u 7},

∵min{2,∞,∞,4,8,7,1+2,1+3,1+∞,1+∞,1+7,1+∞}=2, ∴d (u 0 ,u 2 )=2,l 2=(u 0 ,u 2 ),| l 2|=2.

(3)S 2 ={ u 0 ,u 1 ,u 2},~ S 2 ={ u 3 ,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,

∴d (u 0 ,u 3)=3, l 3 =(u 0 ,u 2 , u 3),| l 3|=3.

(4) S 3 ={ u 0 ,u 1 ,u 2 , u 3}, ~S 3 ={ u 4 ,u 5 ,u 6 ,u 7},

∵min{∞, 4,8,7,1+∞,1+∞,1+∞,1+5,2+∞,2+∞,2+∞,2+5,3+6,3+∞,3+

∞,3+3}=4,

∴d (u 0 ,u 5)=4, l 4=(u 0 ,u 5 ),| l 4|=4.

(5) S 4 ={ u 0 ,u 1 ,u 2 , u 3 , u 5}, ~S 5 ={ u 4 , u 6 , u 7},

∵min{∞,8,7,1+∞,1+7,1+∞,2+∞,2+∞,2+5,3+6,3+

∞,3+3,4+6,4+2,4+3}=6,

∴d (u 0 ,u 7)=6, l 5=(u 0 ,u 2 ,u 3 ,u 7),| l 5|=6.

(6) S 5 ={ u 0 ,u 1 ,u 2 , u 3 , u 5, u 7}, ~S 5 ={ u 4 , u 6 },

∵min{∞,8,1+∞,1+7, 2+∞,2+∞, 3+6,3+∞, 4+6,4+2,6+4,6+∞}=6, ∴d (u 0 ,u 6)=6, l 6=(u 0 ,u 5, u 6),| l 6|=6.

(7) 6012357664{,,,,,,},~{},S u u u u u u u S u ==

min{,1,2,36,46,64,64}9∞+∞+∞++++=

04702347(,)9,(,,,},||9d u u l u u u u l ∴===

故从

0u 到其余各点的最短距离分别为:

1012023023(,),(,),(,,),l u u l u u l u u u ===

40550237605670234(,),(,,,),(,,),(,,,)l u u l u u u u l u u u l u u u u ====

MATLAB 函数

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 i<=n

for j =1 :n

if l(i)>l(j)+W(j,i)

l(i)=l(j)+W(j,i);

z(i)=j;

if j

i=j-1;

end

end

end

i=i+1;

end

W =[ 0 2 1 8 Inf Inf Inf Inf

2 0 Inf 6 1 Inf Inf Inf

1 Inf 0 7 Inf Inf 9 Inf

8 6 7 0 5 1 2 Inf

Inf 1 Inf 5 0 3 Inf 9

Inf Inf Inf 1 3 0 4 6

Inf Inf 9 2 Inf 4 0 3

Inf Inf Inf Inf 9 6 3 0 ];

Dijkstra(G ,D ,s){

//用Dijkstra 算法求有向网G 的源点s 到各顶点的最短路径长度 //以下是初始化操作

S={s};D[s]=0; //设置初始的红点集及最短距离

for( all i ∈ V-S )do //对蓝点集中每个顶点i

D[i]=G[s][i]; //设置i 初始的估计距离为w

//以下是扩充红点集

for(i=0;i

D[k]=min{D[i]:all i V-S}; //在当前蓝点集中选估计距离最小的顶点k

if(D[k]等于∞)

return ; //蓝点集中所有蓝点的估计距离均为∞时, //表示这些顶点的最短路径不存在。

S=S ∪{k}; //将蓝点k 涂红后扩充到红点集

for( all j ∈V-S )do //调整剩余蓝点的估计距离

if(D[j]>D[k]+G[k][j])

//新红点k 使原D[j]值变小时,用新路径的长度修改D[j], //使j 离s 更近。

D[j]=D[k]+G[k][j];

}

}

3.2 每对顶点之间的最短路径

计算赋权图中各对顶点之间最短路径,显然可以调用Dijkstra 算法。具体方法是:每次以不同的顶点作为起点,用Dijkstra 算法求出从该起点到其余顶点的最短路径,反复执行n 次这样的操作,就可得到从每一个顶点到其它顶点的最短路径。这种算法的时间复杂度为)(3n O 。第二种解决这一问题的方法是由Floyd. R.W 提出的算法,称之为Floyd 算法。

假设图G 权的邻接矩阵为0A ,

?????

???????=nn n n n n a a a a a a a a a A 2122221

112110 来存放各边长度,其中:

0=ii a n i ,,2,1 =;

∞=ij a j i ,之间没有边,在程序中以各边都不可能达到的充分大的数代替; ij ij w a = ij w 是j i ,之间边的长度,n j i ,,2,1, =。

对于无向图,0A 是对称矩阵,ji ij a a =。

Floyd 算法的基本思想是:递推产生一个矩阵序列n k A A A A ,,,,,10 ,其中),(j i A k 表示从顶点i v 到顶点j v 的路径上所经过的顶点序号不大于k 的最短路径长度。

计算时用迭代公式:

)),(),(),,(min(),(111j k A k i A j i A j i A k k k k ---+=

k 是迭代次数,n k j i ,,2,1,, =。

最后,当n k =时,n A 即是各顶点之间的最短通路值。

例10 用Floyd 算法求解例1。

矩阵path 用来存放每对顶点之间最短路径上所经过的顶点的序号。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:6

for i=1:6

for j=1:6

if b(i,j)>b(i,k)+b(k,j)

b(i,j)=b(i,k)+b(k,j);

path(i,j)=k;

end

end

end

end

b, path

§4 树

4.1 基本概念

连通的无圈图叫做树,记之为T 。若图G 满足)()(T V G V =,)()(G E T E ?,则称T 是G 的生成树。图G 连通的充分必要条件为G 有生成树。一个连通图的生成树的个数很多,用)(G τ表示G 的生成树的个数,则有公式

公式 (Caylay)2)(-=n n n K τ。

公式 )()()(e G e G G ?+-=τττ。

其中e G -表示从G 上删除边e ,e G ?表示把e 的长度收缩为零得到的图。

树有下面常用的五个充要条件。

定理1 (i )G 是树当且仅当G 中任二顶点之间有且仅有一条轨道。

(ii )G 是树当且仅当G 无圈,且1-=νε。

(iii )G 是树当且仅当G 连通,且1-=νε。

(iv )G 是树当且仅当G 连通,且)(G E e ∈?,e G -不连通。

(v )G 是树当且仅当G 无圈,)(G E e ??,e G +恰有一个圈。

4.2 应用—连线问题

欲修筑连接n 个城市的铁路,已知i 城与j 城之间的铁路造价为ij C ,设计一个线路图,使总造价最低。

连线问题的数学模型是在连通赋权图上求权最小的生成树。赋权图的具有最小权的生成树叫做最小生成树。

下面介绍构造最小生成树的两种常用算法。

4.2.1 prim 算法构造最小生成树

设置两个集合P 和Q ,其中P 用于存放G 的最小生成树中的顶点,集合Q 存放G 的最小生成树中的边。令集合P 的初值为}{1v P =(假设构造最小生成树时,从顶点1v 出发),集合Q 的初值为Φ=Q 。prim 算法的思想是,从所有P p ∈,P V v -∈的边中,选取具有最小权值的边pv ,将顶点v 加入集合P 中,将边pv 加入集合Q 中,如此不断重复,直到V P =时,最小生成树构造完毕,这时集合Q 中包含了最小生成树的所有边。

prim 算法如下:

(i )}{1v P =,Φ=Q ;

(ii )while V P =~

},,m i n (P V v P p w pv pv -∈∈=

}{v P P +=

}{pv Q Q +=

end

例11 用prim 算法求右图的最小生成树。

我们用n result ?3的第一、二、三行分别表示生成树边的起点、终点、权集合。Matlab 程序如下:

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;

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)-1

temp=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))=[];

end

result

4.2.2 Kruskal 算法构造最小生成树

科茹斯克尔(Kruskal )算法是一个好算法。Kruskal 算法如下:

(i)选)(1G E e ∈,使得min )(1=e w 。

(ii)若i e e e ,,,21 已选好,则从},,,{)(21i e e e G E -中选取1+i e ,使得

① }],,,,[{121+i i e e e e G 中无圈,且

② min )(1=+i e w 。

(iii)直到选得1-νe 为止。

例12 用Kruskal 算法构造例3的最小生成树。

我们用n index ?2存放各边端点的信息,

当选中某一边之后,就将此边对应的顶点序号中较大序号u 改记为此边的另一序号v ,同时把后面边中所有序号为u 的改记为v 。此方法的几何意义是:将序号u 的这个顶点收缩到v 顶点,u 顶点不复存在。后面继续寻查时,发现某边的两个顶点序号相同时,认为已被收缩掉,失去了被选取的资格。

Matlab 程序如下:

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;

a(5,6)=70;

[i,j]=find((a~=0)&(a~=M));

b=a(find((a~=0)&(a~=M)));

data=[i';j';b'];index=data(1:2,:);

loop=max(size(a))-1;

result=[];

while length(result)

temp=min(data(3,:));

flag=find(data(3,:)==temp);

flag=flag(1);

v1=data(1,flag);v2=data(2,flag);

if index(1,flag)~=index(2,flag)

result=[result,data(:,flag)];

end

if v1>v2

index(find(index==v1))=v2;

else

index(find(index==v2))=v1;

end

data(:,flag)=[];

index(:,flag)=[];

end

result

§5 匹配问题

定义 若)(G E M ?,M e e j i ∈?,,i e 与j e 无公共端点(j i ≠),则称M 为图G 的一个对集;M 中的一条边的两个端点叫做在对集M 中相配;M 中的端点称为被M 许配;G 中每个顶点皆被M 许配时,M 称为完美对集;G 中已无使|||'|M M >的对集'M ,则M 称为最大对集;若G 中有一轨,其边交替地在对集M 内外出现,则称此轨为M 的交错轨,交错轨的起止顶点都未被许配时,此交错轨称为可增广轨。

若把可增广轨上在M 外的边纳入对集,把M 内的边从对集中删除,则被许配的顶点数增加2,对集中的“对儿”增加一个。

1957年,贝尔热(Berge)得到最大对集的充要条件:

定理2 M 是图G 中的最大对集当且仅当G 中无M 可增广轨。

1935年,霍尔(Hall)得到下面的许配定理:

定理 3 G 为二分图,X 与Y 是顶点集的划分,G 中存在把X 中顶点皆许配的对集的充要条件是,X S ??,则|||)(|S S N ≥,其中)(S N 是S 中顶点的邻集。

由上述定理可以得出:

推论1:若G 是k ()0>k 正则2分图,则G 有完美对集。

所谓k 正则图,即每顶点皆k 度的图。

由此推论得出下面的婚配定理:

定理4 每个姑娘都结识)1(≥k k 位小伙子,每个小伙子都结识k 位姑娘,则每位姑娘都能和她认识的一个小伙子结婚,并且每位小伙子也能和他认识的一个姑娘结婚。

人员分派问题等实际问题可以化成对集来解决。

人员分派问题:工作人员n x x x ,,,21 去做n 件工作n y y y ,,,21 ,每人适合做其中一件或几件,问能否每人都有一份适合的工作?如果不能,最多几人可以有适合的工作?

这个问题的数学模型是:G 是二分图,顶点集划分为Y X G V =)(,},,{11n x x X =,},,{11n y y Y =,当且仅当i x 适合做工作i y 时,)(G E y x i i ∈,求G 中的最大对集。

解决这个问题可以利用1965年埃德门兹(Edmonds)提出的匈牙利算法。

匈牙利算法:

(i )从G 中任意取定一个初始对集M 。

(ii )若M 把X 中的顶点皆许配,停止,M 即完美对集;否则取X 中未被M 许配的一顶点u ,记}{u S =,Φ=T 。

(iii )若T S N =)(,停止,无完美对集;否则取T S N y -∈)(。

(iv )若y 是被M 许配的,设M yz ∈,}{z S S =,}{y T T =,转(iii );否则,取可增广轨),(y u P ,令))(())((M P E P E M M --= ,转(ii )。

把以上算法稍加修改就能够用来求二分图的最大对集。

最优分派问题:在人员分派问题中,工作人员适合做的各项工作当中,效益未必一致,我们需要制定一个分派方案,使公司总效益最大。

这个问题的数学模型是:在人员分派问题的模型中,图G 的每边加了权0)(≥j i y x w ,表示i x 干j y 工作的效益,求加权图G 上的权最大的完美对集。

解决这个问题可以用库恩—曼克莱斯(Kuhn-Munkres )算法。为此,我们要引入可行顶点标号与相等子图的概念。

定义 若映射R G V l →)(:,满足Y y X x ∈∈?,,

),()()(y x w y l x l ≥+,

则称l 是二分图G 的可行顶点标号。令

)}()()(),(|{xy w y l x l G E xy xy E l =+∈=,

称以l E 为边集的G 的生成子图为相等子图,记作l G 。

可行顶点标号是存在的。例如

;),(max )(X x xy w x l Y

y ∈=∈ Y y y l ∈= ,0)(。

定理5 l G 的完美对集即为G 的权最大的完美对集。

Kuhn-Munkres 算法

(i )选定初始可行顶点标号l ,确定l G ,在l G 中选取一个对集M 。

(ii )若X 中顶点皆被M 许配,停止,M 即G 的权最大的完美对集;否则,取l G 中未被M 许配的顶点u ,令}{u S =, Φ=T 。

(iii)若T S N l G ?)(,转(iv );若T S N l G =)(,取

)}()()({min ,xy w y l x l T

y S x l -+=?∈α, ??

???∈+∈-=其它),(,)(,)()(v l T v v l S v v l v l l l αα,

l l = ,l G G =。

(iv )选T S N l G -)(中一顶点y ,若y 已被M 许配,且M yx ∈,则}{z S S =,

}{y T T =,转(iii )

;否则,取l G 中一个M 可增广轨),(y u P ,令 ))(())((M P E P E M M --= ,

转(ii )。

其中)(S N l G 是l G 中S 的相邻顶点集。

§6 Euler 图和Hamilton 图

6.1 基本概念

定义 经过G 的每条边的迹叫做G 的Euler 迹;闭的Euler 迹叫做Euler 回路或E 回路;含Euler 回路的图叫做Euler 图。

直观地讲,Euler 图就是从一顶点出发每边恰通过一次能回到出发点的那种图,即不重复地行遍所有的边再回到出发点。

定理7 (i )G 是Euler 图的充分必要条件是G 连通且每顶点皆偶次。

(ii )G 是Euler 图的充分必要条件是G 连通且 d i i C

G 1==,i C 是圈,

)()()(j i C E C E j i ≠Φ= 。

(iii )G 中有Euler 迹的充要条件是G 连通且至多有两个奇次点。

定义 包含G 的每个顶点的轨叫做Hamilton(哈密顿)轨;闭的Hamilton 轨叫做Hamilton 圈或H 圈;含Hamilton 圈的图叫做Hamilton 图。

直观地讲,Hamilton 图就是从一顶点出发每顶点恰通过一次能回到出发点的那种图,即不重复地行遍所有的顶点再回到出发点。

6.2 Euler 回路的Fleury 算法

1921年,Fleury 给出下面的求Euler 回路的算法。

Fleury 算法:

1o . )(0G V v ∈?,令00v W =。

2o . 假设迹i i i v e v e v W 110=已经选定,那么按下述方法从},,{1i e e E -中选取边1+i e :

(i )1+i e 和i v 相关联;

(ii )除非没有别的边可选择,否则1+i e 不是},,{1i i e e G G -=的割边(cut edge)。(所谓割边是一条删除后使连通图不再连通的边)。

3o . 当第2步不能再执行时,算法停止。

6.3 应用

6.3.1 邮递员问题

中国邮递员问题

一位邮递员从邮局选好邮件去投递,然后返回邮局,当然他必须经过他负责投递的每条街道至少一次,为他设计一条投递路线,使得他行程最短。

上述中国邮递员问题的数学模型是:在一个赋权连通图上求一个含所有边的回路,且使此回路的权最小。

显然,若此连通赋权图是Euler 图,则可用Fleury 算法求Euler 回路,此回路即为所求。

对于非Euler 图,1973年,Edmonds 和Johnson 给出下面的解法:

设G 是连通赋权图。

(i )求)}2(mod 1)(),(|{0=∈=v d G V v v V 。

(ii )对每对顶点0,V v u ∈,求),(v u d (),(v u d 是u 与v 的距离,可用Floyd 算法求得)。

(iii )构造完全赋权图||0V K ,以0V 为顶点集,以),(v u d 为边uv 的权。

(iv )求||0V K 中权之和最小的完美对集M 。

(v )求M 中边的端点之间的在G 中的最短轨。

(vi )在(v )中求得的每条最短轨上每条边添加一条等权的所谓“倍边”(即共端点共权的边)。

(vii )在(vi )中得的图'G 上求Euler 回路即为中国邮递员问题的解。

多邮递员问题:

邮局有)2(≥k k 位投递员,同时投递信件,全城街道都要投递,完成任务返回邮局,如何分配投递路线,使得完成投递任务的时间最早?我们把这一问题记成kPP 。

kPP 的数学模型如下:

),(E V G 是连通图,)(0G V v ∈,求G 的回路k C C ,,1 ,使得

(i ))(0i C V v ∈,k i ,,2,1 =,

(ii )min )(max )(1=∑∈≤≤i C E e k

i e w ,

(iii ) k i i G E C E 1

)()(==

6.3.2 旅行商(TSP )问题

一名推销员准备前往若干城市推销产品,然后回到他的出发地。如何为他设计一条最短的旅行路线(从驻地出发,经过每个城市恰好一次,最后返回驻地)?这个问题称为旅行商问题。用图论的术语说,就是在一个赋权完全图中,找出一个有最小权的Hamilton 圈。称这种圈为最优圈。与最短路问题及连线问题相反,目前还没有求解旅行商问题的有效算法。所以希望有一个方法以获得相当好(但不一定最优)的解。

一个可行的办法是首先求一个Hamilton 圈C ,然后适当修改C 以得到具有较小权的另一个Hamilton 圈。修改的方法叫做改良圈算法。设初始圈121v v v v C n =。

(i )对于n j i <<+<11,构造新的Hamilton 圈:

12112121v v v v v v v v v v v C n j j i j j j i ij +++--=,

它是由C 中删去边1+i i v v 和1+j j v v ,添加边j i v v 和11++j i v v 而得到的。若

)()()()(1111+++++<+j j i i j i j i v v w v v w v v w v v w ,

则以ij C 代替C ,ij C 叫做C 的改良圈。 (ii )转(i ),直至无法改进,停止。

用改良圈算法得到的结果几乎可以肯定不是最优的。为了得到更高的精确度,可以选择不同的初始圈,重复进行几次算法,以求得较精确的结果。

这个算法的优劣程度有时能用Kruskal 算法加以说明。假设C 是G 中的最优圈。则对于任何顶点v ,v C -是在v G -中的Hamilton 轨,因而也是v G -的生成树。由此推知:若T 是v G -中的最优树,同时e 和f 是和v 关联的两条边,并使得)()(f w e w +尽可能小,则)()()(f w e w T w ++将是)(C w 的一个下界。

这里介绍的方法已被进一步发展。圈的修改过程一次替换三条边比一次仅替换两条边更为有效;然而,有点奇怪的是,进一步推广这一想法,就不利了。

例13 从北京(Pe )乘飞机到东京(T)、纽约(N)、墨西哥城(M)、伦敦(L)、巴黎(Pa)五城市做旅游,每城市恰去一次再回北京,应如何安排旅游线,使旅程最短?各城市之

clc,clear

a(1,2)=56;a(1,3)=35;a(1,4)=21;a(1,5)=51;a(1,6)=60;

a(2,3)=21;a(2,4)=57;a(2,5)=78;a(2,6)=70;

a(3,4)=36;a(3,5)=68;a(3,6)=68;

a(4,5)=51;a(4,6)=61;

a(5,6)=13;

a(6,:)=0;

a=a+a';

c1=[5 1:4 6];

L=length(c1);

flag=1;

while flag>0

flag=0;

for m=1:L-3

for n=m+2:L-1

if

a(c1(m),c1(n))+a(c1(m+1),c1(n+1))

flag=1;

c1(m+1:n)=c1(n:-1:m+1);

end

end

end

end

sum1=0;

for i=1:L-1

sum1=sum1+a(c1(i),c1(i+1));

end

circle=c1;

sum=sum1;

c1=[5 6 1:4];%改变初始圈,该算法的最后一个顶点不动

flag=1;

while flag>0

flag=0;

for m=1:L-3

for n=m+2:L-1

if a(c1(m),c1(n))+a(c1(m+1),c1(n+1))<...

a(c1(m),c1(m+1))+a(c1(n),c1(n+1))

flag=1;

c1(m+1:n)=c1(n:-1:m+1);

end

end

end

end

sum1=0;

for i=1:L-1

sum1=sum1+a(c1(i),c1(i+1));

end

if sum1

sum=sum1;

circle=c1;

end

circle,sum

§7 最大流问题

7.1 最大流问题的数学描述

7.1.1 网络中的流

定义 在以V 为节点集,A 为弧集的有向图),(A V G =上定义如下的权函数:

(i )R A L →:为孤上的权函数,弧A j i ∈),(对应的权),(j i L 记为ij l ,称为孤),(j i 的容量下界(lower bound );

(ii )R A U →:为弧上的权函数,弧A j i ∈),(对应的权),(j i U 记为ij u ,称为孤),(j i 的容量上界,或直接称为容量(capacity );

(iii )R V D →:为顶点上的权函数,节点V i ∈对应的权)(i D 记为i d ,称为顶点i 的供需量(supply /demand );

此时所构成的网络称为流网络,可以记为

),,,,(D U L A V N =。

由于我们只讨论A V ,为有限集合的情况,所以对于弧上的权函数U L ,和顶点上的权函数D ,可以直接用所有孤上对应的权组成的有限维向量表示,因此D U L ,,有时直接称为权向量,或简称权。由于给定有向图),(A V G =后,我们总是可以在它的弧集合和顶点集合上定义各种权函数,所以流网络一般也直接简称为网络。

在流网络中,弧),(j i 的容量下界ij l 和容量上界ij u 表示的物理意义分别是:通过该弧发送某种“物质”时,必须发送的最小数量为ij l ,而发送的最大数量为ij u 。顶点V i ∈对应的供需量i d 则表示该顶点从网络外部获得的“物质”数量(0

图论基础

1、略 2、计算有向无圈图的根 输入一个有向无圈图DAG,计算和输出DAG的根r(即r到其他任何顶点都有一条路。若图中没有根,则输出“not found”)。 输入:顶点数n和边数e;以下为e行,每行为一条有向边的两个端点 输出:根r或者“not found” 算法分析 设 const mx=100;{顶点数的上限} var n,e,i,j,k,a,b:integer;{ 顶点数n、边数e} g:array[1..mx,1..mx]of boolean;{传递闭包} bn:boolean;{根存在标志} 1、输入信息,计算传递闭包 readln(n,e);{输入顶点数和边数} fillchar(g,sizeof(g),0);{ 有向无圈图初始化} for i:=1 to e do{输入信息,构造传递闭包的初始值} begin readln(a,b);g[a,b]:=true end; for k:=1 to n do{计算传递闭包} for i:=1 to n do for j:=1 to n do if g[i,j] or g[i,k] and g[k,j]then g[i,j]:=true; 2、计算DAG的根 然后枚举每一个顶点。根据传递闭包的信息,若当前顶点至其它所有顶点有路,则判定该顶点即为根。若没有一个顶点可作为DAG的根,则输出失败信息 for i:=1 to n do{枚举每一个可能的根} begin bn:=true;{设定I至其他所有顶点有路的标志} for j:=1 to n do{若I至任一个顶点无路,则返回bn为false} if (i<>j) and not g[i,j] then begin bn:=false; break end; if bn then break{若I至其他所有顶点有路,则输出根i} end; if bn then writeln(i) else writeln('not found'){若不存在根,则输出失败信息}

数学建模笔记

数学模型按照不同的分类标准有许多种类: 1。按照模型的数学方法分,有几何模型,图论模型,微分方程模型.概率模型,最优控制模型,规划论模型,马氏链模型. 2。按模型的特征分,有静态模型和动态模型,确定性模型和随机模型,离散模型和连续性模型,线性模型和非线性模型. 3.按模型的应用领域分,有人口模型,交通模型,经济模型,生态模型,资源模型。环境模型。 4.按建模的目的分,有预测模型,优化模型,决策模型,控制模型等。 5.按对模型结构的了解程度分,有白箱模型,灰箱模型,黑箱模型。 数学建模的十大算法: 1.蒙特卡洛算法(该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟可以来检验自己模型的正确性,比较好用的算法。) 2.数据拟合、参数估计、插值等数据处理算法(比赛中通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用matlab作为工具。) 3.线性规划、整数规划、多元规划、二次规划等规划类问题(建模竞赛大多数问题属于最优化问题,很多时候这些问题可以用数学规划算法来描述,通常使用lingo、lingdo软件实现) 4.图论算法(这类算法可以分为很多种,包括最短路、网络流、二分图等算法,涉及到图论的问题可以用这些方法解决,需要认真准备。) 5.动态规划、回溯搜索、分治算法、分支定界等计算机算法(这些算法是算法设计中比较常用的方法,很多场合可以用到竞赛中) 6.最优化理论的三大非经典算法:模拟退火法、神经网络、遗传算法(这些问题时用来解决一些较困难的最优化问题的算法,对于有些问题非常有帮助,但是算法的实现比较困难,需谨慎使用) 7.网格算法和穷举法(当重点讨论模型本身而情史算法的时候,可以使用这种暴力方案,最好使用一些高级语言作为编程工具) 8.一些连续离散化方法(很多问题都是从实际来的,数据可以是连续的,而计算机只认得是离散的数据,因此将其离散化后进行差分代替微分、求和代替积分等思想是非常重要的。

测度论基础知识总结

测度论基础知识总结 1.集合论 1.1 集合与基本运算 ·概念:具有一定性质的对象构成的全体(不严格定义)。中间含有的对象叫元素。 全集:要研究的问题涉及到的最大集合。 空集:没有任何元素的集合。 表达方法:{x(集合元素x)|x应该有的性质} ·元素与集合的关系:x A,x?A ·集合之间的关系 只有包含或者不包含 若对于任意元素x A,x B则A包含于B(证明就用这个方法),A是B的子集(A B 则为B的真子集) 包含的特殊情况相等:A=B就是A包含于B同时B包含于A 真子集:A包含于B但A B ·集合的运算 ①单个元素的幂集 对于一个集合X,它的幂集表示所有其子集为元素构成的集合。这种以集合为元素的集合,也叫集合族。 ②两个集合的运算 交:A B={x| x A且x B} 并:A B={x| x A或x B} 差:A\B(或写成A-B)={x| x A且x?B} 补:=U\A(U是问题要研究的全集) 于是有等式A\B=A 积:(直积)A×B={(x,y)| x A且y B }(把A、B中元素构成有序对) ③多个元素的运算 多个交表示所有以λ为角标的集合的并,要求λ,I称为指标集。 类似有多个并 注:可以是无穷个 【例】={x| x>},A={x| x>0},则A= ·集合的分析相关性质 ①上限集:一列集合{},定义上限集为。类似于数列的上极限。

②下限集:一列集合{},定义下限集为。类似于数列的下极限。 ③集合列的极限:当上限集等于下限集时极限存在,就是上限集(或下限集)。 ④单调集合列:若始终有包含于,也就是集合越来越大,则为递增集合列;反之, 若始终有,则为递减列。 若为递增列,则有极限=;若为递减列,则有=。 1.2映射 ·定义:X、Y是两个集合,对任意x X,存在唯一的y=f(x)Y与之对应,则对应法则f 为X到Y的一个映射,记为f:X→Y。 像集:对于X的一个子集A,像集{f(x)| x A}记为f(A),显然包含于Y 原像集:对于Y的一个子集B,原像集{x| x记为 ·满射:f(X)=Y,即Y中所有元素都是像 单射:X中不同元素一定对应Y中不同的像 双射:既是单射又是满射。双射是一一对应的映射。 ·逆映射:对于双射,建立一种Y到X的双射,将像映射到原像上。记为:Y→X ·复合映射:f:X→Y,g:Y→Z,它们的复合g o f:X→Z,写成g(f(X)) ·函数,一个(n维实数向量)到R(实数)上的映射 ·性质(映射与交并运算顺序可交换性) 对于f:X→Y,X若干个子集,Y若干个子集 f(U)=Uf() = f()包含于(只有这一个不一定等于!!!) 不等于的例子:A={1} ,B={-1},f(x)=|x|,则f(A B)f(A)f(B) = 用集合相等定义可证明。 1.3集合的势 ·对等:如果集合A和B之间可以建立双射,则A对等于B。记为A~B 性质:①A到B有单射→A与B子集对等 A到B有满射→B与A子集对等 ②A~B,B~C,则A~C(传递性) ③A~C,B~D,则A×B~C×D

数学建模中的图论方法

数学建模中的图论方法 一、引言 我们知道,数学建模竞赛中有问题A和问题B。一般而言,问题A是连续系统中的问题,问题B是离散系统中的问题。由于我们在大学数学教育内容中,连续系统方面的知识的比例较大,而离散数学比例较小。因此很多人有这样的感觉,A题入手快,而B题不好下手。 另外,在有限元素的离散系统中,相应的数学模型又可以划分为两类,一类是存在有效算法的所谓P类问题,即多项式时间内可以解决的问题。但是这类问题在MCM中非常少见,事实上,由于竞赛是开卷的,参考相关文献,使用现成的算法解决一个P类问题,不能显示参赛者的建模及解决实际问题能力之大小;还有一类所谓的NP问题,这种问题每一个都尚未建立有效的算法,也许真的就不可能有有效算法来解决。命题往往以这种NPC问题为数学背景,找一个具体的实际模型来考验参赛者。这样增加了建立数学模型的难度。但是这也并不是说无法求解。一般来说,由于问题是具体的实例,我们可以找到特殊的解法,或者可以给出一个近似解。 图论作为离散数学的一个重要分支,在工程技术、自然科学和经济管理中的许多方面都能提供有力的数学模型来解决实际问题,所以吸引了很多研究人员去研究图论中的方法和算法。应该说,我们对图论中的经典例子或多或少还是有一些了解的,比如,哥尼斯堡七桥问题、中国邮递员问题、四色定理等等。图论方法已经成为数学模型中的重要方法。许多难题由于归结为图论问题被巧妙地解决。而且,从历年的数学建模竞赛看,出现图论模型的频率极大,比如: AMCM90B-扫雪问题; AMCM91B-寻找最优Steiner树; AMCM92B-紧急修复系统的研制(最小生成树) AMCM94B-计算机传输数据的最小时间(边染色问题) CMCM93B-足球队排名(特征向量法) CMCM94B-锁具装箱问题(最大独立顶点集、最小覆盖等用来证明最优性) CMCM98B-灾情巡视路线(最优回路) 等等。这里面都直接或是间接用到图论方面的知识。要说明的是,这里图论只是解决问题的一种方法,而不是唯一的方法。 本文将从图论的角度来说明如何将一个工程问题转化为合理而且可求解的数学模型,着重介绍图论中的典型算法。这里只是一些基础、简单的介绍,目的在于了解这方面的知识和应用,拓宽大家的思路,希望起到抛砖引玉的作用,要掌握更多还需要我们进一步的学习和实践。

离散数学的基础知识点总结

离散数学的基础知识点总结 第一章命题逻辑 1.前键为真,后键为假才为假;<—>,相同为真,不同为假;2?主析取范式:极小项(m)之和;主合取范式:极大项(M)之积; 3.求极小项时,命题变元的肯定为1,否定为0,求极大项时相反; 4.求极大极小项时,每个变元或变元的否定只能出现一次,求极小项时变元不够合取真,求极大项时变元不够析取假; 5.求范式时,为保证编码不错,命题变元最好按P,Q,R的顺序依次写; 6.真值表中值为1的项为极小项,值为0的项为极大项; 7.n个变元共有2n个极小项或极大项,这2n为(0~2n-1)刚好为化简完后的主析取加主合取; 8.永真式没有主合取范式,永假式没有主析取范式; 9.推证蕴含式的方法(=>):真值表法;分析法(假定前键为真推出后键为真,假定前键为假推出后键也为假) 10.命题逻辑的推理演算方法:P规则,T规则 ①真值表法;②直接证法;③归谬法;④附加前提法; 第二章谓词逻辑 1.一元谓词:谓词只有一个个体,一元谓词描述命题的性质; 多元谓词:谓词有n个个体,多元谓词描述个体之间的关系; 2.全称量词用蕴含T,存在量词用合取“; 3.既有存在又有全称量词时,先消存在量词,再消全称量词;

第四章集合 1.N,表示自然数集,1,2,3……,不包括0; 2.基:集合A中不同元素的个数,|A|; 3.幕集:给定集合A,以集合A的所有子集为元素组成的集合,P(A); 4.若集合A有n个元素,幕集P(A)有2°个元素,|P(A)|= 2|A|= 2; 5.集合的分划:(等价关系) ①每一个分划都是由集合A的几个子集构成的集合; ②这几个子集相交为空,相并为全(A); 6.集合的分划与覆盖的比较: 分划:每个元素均应出现且仅出现一次在子集中; 覆盖:只要求每个元素都出现,没有要求只出现一次; 第五章关系 1.若集合A有m个元素,集合B有n个元素,则笛卡尔AXB的基数为mn , A到B上可以定义2mn种不同的关系; 2.若集合A有n个元素,则|A X\|= n2, A上有2n个不同的关系; 3.全关系的性质:自反性,对称性,传递性; 空关系的性质:反自反性,反对称性,传递性; 全圭寸闭环的性质:自反性,对称性,反对称性,传递性; 4.前域(domR):所有元素x组成的集合;

外测度的性质与计算小结

外测度的性质与计算 The properties and calculation of the outer measure 姓名: 学号: 学院:数学与信息科学学院 专业:数学与应用数学 指导老师: 完成时间: 外测度的性质与计算 【摘要】Lebesgue外测度是Lebesgue积分的基础,本论文主要论述了它的一些性质及相关的计算.首先,给出了Lebesgue外测度的定义;接着,指出和证明了外测度具有的非负性、单调性、次可数可加性、距离可加性、平移不变性这五大主要性质;同时给出了外测度的介值定理和一些其他的性质,并讨论了在一般情况下,外测度不具备可数可加性;然后讨论了可数集的外测度的性质,着重写出可数

江西师范大学11届学士学位毕业论文 集的外测度具有可数可加性;最后是与外测度计算相关的一些例题.【关键词】Lebesgue外测度,次可数可加性,距离可加性。

The properties and calculation of the outside measure 【abstract 】Lebesgue outer measure is the base of lebesgue integral, this thesis mainly discusses some properties and its related calculation. At first, give the definition of Lebesgue outer measure; then pointed out and proved the outer measure has nonnegative, monotonicity and second countable additive property , distance additive property,translation invariant property ,the five main properties; It also gives the outer measure mean value theorem and some other properties, and discusses the properties under the meaning of general point sets, the outer measure does not have countable additive property. Then discussed the property of outer measure of countable set, and emphatically write that outer measure of countable set has count additive property. And the last is some examples about outer measure computation. 【keywords 】Lebesgue outer measure, Second countable additive property , Distance additive property

第二章 测度论的知识要点与复习自测

第二章 测度论的知识要点与复习自测 一、Lebesgue 外测度的知识要点: ◇ 熟练掌握Lebesgue 外测度的定义和外测度的基本性质(包括基本性质:非负性、单调性、次可数可加性;Lebesgue 外测度的特有性质:距离分离性); ◇ 会用定义或性质求一些典型集合的外测度(例如:n R 中至多可数集,区间,Cantor (三分)集,黎曼可积函数(特别是连续函数)图象等的外测度); ◇ 特别注意零测集的含义和性质【如n R 中的任何集合并上零测集或减去零测集外侧度不变;零测集的子集仍为零测集;至多可数个零测集的并集仍为零测集】。 自测题: 1、叙述n R 中Lebesgue 外侧度的定义及性质,并用定义和性质解决如下问题: (1)设n n Q R ?为有理点集,计算*n m Q 0=; (2)设n R E ?为至多可数集,计算* m 0E =; (3)设n ,R E F ?,* m 0E =,则()()***m m m \F E F F E ?==。 2、据理说明下面的结论是否成立:设n R E ?, (1)若E 为有界集,则* m E <+∞; (2)若* m E <+∞,则E 为有界集; (3)若*m E =+∞,则E 为无界集; (4)若E 为无界集,则* m E =+∞。 3、设n R I ?为区间,证明:*m I I =,其中I 表示I 的体积(注意I 分有界和无界 两种情况来证明);并利用此结论和外侧度的性质再解决如下问题: (1)设1[0,1]R P ??为三分Cantor 集,则* m 0P =;(注意三分Cantor 集的构造) (2)设()f x 为定义在1[,]R a b ?上的黎曼可积函数, {}2()(,)(),[,]R p G f x y y f x x a b ==∈?, ()f x 在[,]a b 的图像,则*m ()0p G f =;(注意黎曼可积的充要条件的使用) (3)设n R E ?有内点,则* m 0E >; (4)(外侧度的介值性)设1 R E ?为有界集,*m 0E >,则对任意* 0m c E ≤≤,存在1E E ?,使得,*1m E c =;(注意构造适当的连续函数,利用连续函数的介值性) (5)(外侧度的介值性的一般形式)设1 R E ?,*m 0E >,则对任意* 0m c E ≤≤,存在1E E ?,使得,*1m E c =。(注意:此结论要用到后面的等测包定理和单调递增可测集列的测度性质) 二、Lebesgue 可测集的知识要点: ◇ 熟练掌握Lebesgue 可测集的卡氏定义(即C.Caratheodory 定义)及等价 条件(如:余集的可测性;对任意的A E ?和c B E ?,总有()*** m A B m A m B ?=+),会用定义或等价条件来证明一些点集的可测性(例如:零测集,区间等); ◇ 熟练掌握可测集的并、交、差、余运算性质,并会熟练地运用这些性质来判断集合的可测性;

数学建模模拟题,图论,回归模型,聚类分析,因子分析等 (83)

二十一章第三题 摘要 建立目标规划模型,先找出目标函数和约束条件,然后建立模型,利用Lingo程序求解。 关键词:Lingo 目标规划

Ⅰ 问题重述 某工厂生产两种产品,每件产品I 可获利10元,每件产品II 可获利8元。每生产一件产品I ,需要3小时;每生产一件产品II ,需要2.5小时。每周总的有效时间为120小时。若加班生产,则每件产品I 的利润降低1.5元;每件产品II 的利润降低1元。决策者希望在允许的工作及加班时间内取得最大利润,试建立该问题的目标规划模型并求解 Ⅱ 问题分析 建立目标规划模型前,先找出目标函数和约束条件,然后建立模型,利用Lingo 程序求解。 由题可知,无论生产产品Ⅰ或Ⅱ每小时的盈利不超过4元,每周的生产时间不超过160小时,因而最大利润不超过640。 Ⅲ 模型假设 (1) 生产过程中没有出现其他问题; Ⅳ 符号说明 (1)1x 为产品I 在允许的时间内生产的件数; (2)2x 为产品 在允许的时间内生产的件数; (3)3x 为产品I 在加班的时间内生产的件数; (4)4x 为产品 在加班的时间内生产的件数。 Ⅴ 模型建立与求解 () ---++=32211min d p d d p z ???????=≥=≥=++++=++++=++----.4,3,2,10;3,2,1,0, 64075.8810,1605.235.23,1205.23..3432124321121i x i d d x x x x d x x x x d x x t s i i 且为整数, 利用LINGO 编写程序(见附录) 求得1x =40 2x =0 3x =10 4x =4 d -1=0 d -2=0 d - 3 =1即产品I 生产50件,产品II 生产4件时,总的利润最大,最大利润为413元。

数学建模入门基本知识

数学建模知识 ——之新手上路一、数学模型的定义 现在数学模型还没有一个统一的准确的定义,因为站在不同的角度可以有不同的定义。不过我们可以给出如下定义:“数学模型是关于部分现实世界和为一种特殊目的而作的一个抽象的、简化的结构。”具体来说,数学模型就是为了某种目的,用字母、数学及其它数学符号建立起来的等式或不等式以及图表、图像、框图等描述客观事物的特征及其内在联系的数学结构表达式。一般来说数学建模过程可用如下框图来表明: 数学是在实际应用的需求中产生的,要解决实际问题就必需建立数学模型,从此意义上讲数学建模和数学一样有古老历史。例如,欧几里德几何就是一个古老的数学模型,牛顿万有引力定律也是数学建模的一个光辉典范。今天,数学以空前的广度和深度向其它科学技术领域渗透,过去很少应用数学的领域现在迅速走向定量化,数量化,需建立大量的数学模型。特别是新技术、新工艺蓬勃兴起,计算机的普及和广泛应用,数学在许多高新技术上起着十分关键的作用。因此数学建模被时代赋予更为重要的意义。 二、建立数学模型的方法和步骤 1. 模型准备 要了解问题的实际背景,明确建模目的,搜集必需的各种信息,尽量弄清对象的特征。 2. 模型假设 根据对象的特征和建模目的,对问题进行必要的、合理的简化,用精确的语言作出假设,是建模至关重要的一步。如果对问题的所有因素一概考虑,无疑是一种有勇气但方法欠佳的行为,所以高超的建模者能充分发挥想象力、洞察力和判断力,善于辨别主次,而且为了使处理方法简单,应尽量使问题线性化、均匀化。 3. 模型构成 根据所作的假设分析对象的因果关系,利用对象的内在规律和适当的数学工具,构造各个量间的等式关系或其它数学结构。这时,我们便会进入一个广阔的应用数学天地,这里在高数、概率老人的膝下,有许多可爱的孩子们,他们是图论、排队论、线性规划、对策论等许多许多,真是泱泱大国,别有洞天。不过我们应当牢记,建立数学模型是为了让更多的人明了并能加以应用,因此工具愈简单愈有价值。 4. 模型求解 可以采用解方程、画图形、证明定理、逻辑运算、数值运算等各种传统的和近代的数学方法,特别是计算机技术。一道实际问题的解决往往需要纷繁的计算,许多时候还得将系统运行情况用计算机模拟出来,因此编程和熟悉数学软件包能力便举足轻重。 5. 模型分析

图论应用案例

题目:最小生成树在城市交通建设中的应用 姓名: 学号: 指导老师: 专业:机械工程 2014年3月16

目录 摘要..................................................................................... 错误!未定义书签。 1 绪论 (1) 2 有关最小生成树的概念 (2) 3 prim算法介绍 (3) 4 系统设计及其应用 (5) 一、系统设计 (5) 二、最小生成树应用 (8) 5 总结 (11) 参考文献 (12) 附件: (13)

最小生成树在城市交通建设中的应用 摘要:连通图广泛应用于交通建设,求连通图的最小生成树是最主要的应用。比如要在n个城市间建立通信联络网,要考虑的是如何保证n点连通的前提下最节省经费,就应用到了最小生成树。 求图的最小生成树有两种算法,一种是Prim(普里姆)算法,另一种是Kruskal(克鲁斯卡尔)算法。 本文通过将城市各地点转换成连通图,再将连通图转换成邻接矩阵。在Microsoft Visual C++上,通过输入结点和权值,用普里姆算法获得权值最小边来得到最小生成树,从而在保证各个地点之间能连通的情况下节省所需费用。 本文从分析课题的题目背景、题目意义、题目要求等出发,分别从需求分析、总体设计、详细设计、测试等各个方面详细介绍了系统的设计与实现过程,最后对系统的完成情况进行了总结。 关键字:PRIM算法、最小生成树、邻接矩阵、交通建设

Abstract Connected graph is widely applied in traffic construction, connected graph of minimum spanning tree is the main application.Such as to establish a communication network between the n city, want to consider is how to ensure n points connected under the premise of the most save money, apply to the minimum spanning tree. O figure there are two kinds of minimum spanning tree algorithm, one kind is Prim (she) algorithm, the other is a Kruskal algorithm (Kruskal). In this article, through the city around point into a connected graph, then connected graph is transformed into adjacency matrix.On Microsoft Visual c + +, through the input nodes and the weights, gain weight minimum edge using she algorithm to get minimum spanning tree, which in the case of guarantee every location between connected to save costs. Based on the analysis topic subject background, significance, subject requirements, etc, from requirements analysis, general design, detailed design, testing, and other aspects detailed introduces the system design and implementation process, finally the completion of the system are summarized. Key words: PRIM algorithm, minimum spanning tree, adjacency matrix, traffic construction

数学建模模拟题,图论,回归模型,聚类分析,因子分析等 (48)

第11章第2题 摘要 本题分析4 种化肥和3 个小麦品种对小麦产量的影响,以及二者交互作用对小麦产量的影响,可视为两因素方差分析,即化肥和小麦品种两个因素,4种化肥可看作是化肥的四个不同水平,3个小麦品种也可以看作是小麦品种的三个不同水平。 试验的目的是分析化肥的四个不同水平以及小麦品种的三个不同水平对小麦产量有无显着性影响。 关键词:方差分析显着性化肥种类小麦品种

一.问题重述 为了分析4 种化肥和3 个小麦品种对小麦产量的影响,把一块试验田等分成36个小块,分别对3种种子和四种化肥的每一种组合种植3 小块田,产量如表1所示(单位公斤),问不同品种、不同种类的化肥及二者的交互作用对小麦产量有无显着影响。 二.问题分析 本题意在分析四种化肥和三种小麦品种对小麦产量的影响,以及二者交互作用对小麦产量的影响,为两因素方差分析问题,即化肥和小麦品种两个因素,4种化肥可看作是化肥的四个不同水平,3个小麦品种也可以看作是小麦品种的三个不同水平。通过对这两种因素的不同水平及交互作用的分析,从而分析 4 种化肥和3 个小麦品种对小麦产量的影响。 三.模型假设 1.假设只有化肥种类和小麦品种两个因素,其他因素对试验结果不构成影响。 2.假设不存在数据记录错误。 3.假设每一块试验田本身各项指标相同,不会影响结果。 四.符号说明 数字1,2,3,4——不同的化肥种类 数字1,2,3——不同的小麦品种 五.模型建立 将化肥种类和小麦品种视为两个因素,四种化肥种类看作是化肥种类的四个不同水平,三个小麦品种看作是小麦品种的三个不同水平,将表1的数据进行整理,如表2所示。

六.模型求解 将表2数据导入到spss软件中,进行两因素方差检验,得到结果如下:表3

图论总结(超强大)78408

1.图论Graph Theory 1.1.定义与术语Definition and Glossary 1.1.1.图与网络Graph and Network 1.1. 2.图的术语Glossary of Graph 1.1.3.路径与回路Path and Cycle 1.1.4.连通性Connectivity 1.1.5.图论中特殊的集合Sets in graph 1.1.6.匹配Matching 1.1.7.树Tree 1.1.8.组合优化Combinatorial optimization 1.2.图的表示Expressions of graph 1.2.1.邻接矩阵Adjacency matrix 1.2.2.关联矩阵Incidence matrix 1.2.3.邻接表Adjacency list 1.2.4.弧表Arc list 1.2.5.星形表示Star 1.3.图的遍历Traveling in graph 1.3.1.深度优先搜索Depth first search (DFS) 1.3.1.1.概念 1.3.1. 2.求无向连通图中的桥Finding bridges in undirected graph 1.3. 2.广度优先搜索Breadth first search (BFS) 1.4.拓扑排序Topological sort 1.5.路径与回路Paths and circuits 1.5.1.欧拉路径或回路Eulerian path 1.5.1.1.无向图 1.5.1. 2.有向图 1.5.1.3.混合图

1.5.1.4.无权图Unweighted 1.5.1.5.有权图Weighed —中国邮路问题The Chinese post problem 1.5. 2.Hamiltonian Cycle 哈氏路径与回路 1.5. 2.1.无权图Unweighted 1.5. 2.2.有权图Weighed —旅行商问题The travelling salesman problem 1.6.网络优化Network optimization 1.6.1.最小生成树Minimum spanning trees 1.6.1.1.基本算法Basic algorithms 1.6.1.1.1.Prim 1.6.1.1. 2.Kruskal 1.6.1.1.3.Sollin(Boruvka) 1.6.1. 2.扩展模型Extended models 1.6.1. 2.1.度限制生成树Minimum degree-bounded spanning trees 1.6.1. 2.2.k小生成树The k minimum spanning tree problem(k-MST) 1.6. 2.最短路Shortest paths 1.6. 2.1.单源最短路Single-source shortest paths 1.6. 2.1.1.基本算法Basic algorithms 1.6. 2.1.1.1.Dijkstra 1.6. 2.1.1.2.Bellman-Ford 1.6. 2.1.1.2.1.Shortest path faster algorithm(SPFA) 1.6. 2.1.2.应用Applications 1.6. 2.1.2.1.差分约束系统System of difference constraints 1.6. 2.1.2.2.有向无环图上的最短路Shortest paths in DAG 1.6. 2.2.所有顶点对间最短路All-pairs shortest paths 1.6. 2.2.1.基本算法Basic algorithms 1.6. 2.2.1.1.Floyd-Warshall 1.6. 2.2.1.2.Johnson

图论基础知识

图论基本知识 对于网络的研究,最早是从数学家开始的,其基本的理论就是图 论,它也是目前组合数学领域最活跃的分支。我们在复杂网络的研究中将要遇到的各种类型的网络,无向的、有向的、加权的……这些都可以用图论的语言和符号精确简洁地描述。图论不仅为物理学家提供了描述网络的语言和研究的平台,而且其结论和技巧已经被广泛地移植到复杂网络的研究中。图论,尤其是随机图论已经与统计物理并驾齐驱地成为研究复杂网络的两大解析方法之一。考虑到物理学家对于图论这一领域比较陌生,我在此专辟一章介绍图论的基本知识,同时将在后面的章节中不加说明地使用本章定义过的符号。进一步研究所需要的更深入的图论知识,请参考相关文献[1-5]。 本章只给出非平凡的定理的证明,过于简单直观的定理的证明将 留给读者。个别定理涉及到非常深入的数学知识和繁复的证明,我们将列出相关参考文献并略去证明过程。对于图论知识比较熟悉的读者可以直接跳过此章,不影响整体阅读。 图的基本概念 图G 是指两个集合(V ,E),其中集合E 是集合V×V 的一个子集。 集合V 称为图的顶点集,往往被用来代表实际系统中的个体,集合E 被称为图的边集,多用于表示实际系统中个体之间的关系或相互作用。若{,}x y E ,就称图G 中有一条从x 到y 的弧(有向边),记为x→

y ,其中顶点x 叫做弧的起点,顶点y 叫做弧的终点。根据定义,从任意顶点x 到y 至多只有一条弧,这是因为如果两个顶点有多种需要区分的关系或相互作用,我们总是乐意在多个图中分别表示,从而不至于因为这种复杂的关系而给解析分析带来困难。如果再假设图G 中不含自己到自己的弧,我们就称图G 为简单图,或者更精确地叫做有向简单图。以后如果没有特殊的说明,所有出现的图都是简单图。记G 中顶点数为()||G V ν=,边数为()||G E ε=,分别叫做图G 的阶和规模,显然有()()(()1)G G G ενν≤-。图2.1a 给出了一个计算机分级网络的示意图,及其表示为顶点集和边集的形式。 图2.1:网络拓扑结构示意图。图a 是10阶有向图,顶点集为 {1,2,3,4,5,6,7,8,9,10},边集为{1→2,1→3,1→4,2→5,2→6,2→7,3→6,4→7,4→8,6→9,7→9,8→10};图b 是6阶无向图,顶点集为{1,2,3,4,5,6},边集为{13,14,15,23,24,26,36,56}。 从定义中可以看到,从任意顶点x 到y 不能连接两条或以上 边,本文所讨论的图,均符合上述要求,既均为不含多重边的图。如

测度论的知识要点与复习自测

第二章 测度论的知识要点与复习自测 一、Lebesgue 外测度的知识要点: ◇ 熟练掌握Lebesgue 外测度的定义和外测度的基本性质(包括基本性质:非负性、单调性、次可数可加性;Lebesgue 外测度的特有性质:距离分离性); ◇ 会用定义或性质求一些典型集合的外测度(例如:n R 中至多可数集,区间,Cantor (三分)集,黎曼可积函数(特别是连续函数)图象等的外测度); ◇ 特别注意零测集的含义和性质【如n R 中的任何集合并上零测集或减去零测集外侧度不变;零测集的子集仍为零测集;至多可数个零测集的并集仍为零测集】。 自测题: 1、叙述n R 中Lebesgue 外侧度的定义及性质,并用定义和性质解决如下问题: (1)设n n Q R ?为有理点集,计算*n m Q 0=; (2)设n R E ?为至多可数集,计算*m 0E =; (3)设n ,R E F ?,*m 0E =,则()()***m m m \F E F F E ?==。 2、据理说明下面的结论是否成立:设n R E ?, (1)若E 为有界集,则*m E <+∞; (2)若*m E <+∞,则E 为有界集; (3)若*m E =+∞,则E 为无界集; (4)若E 为无界集,则*m E =+∞。 3、设n R I ?为区间,证明:*m I I =,其中I 表示I 的体积(注意I 分有界和无界两种情况来证明);并利用此结论和外侧度的性质再解决如下问题: (1)设1[0,1]R P ??为三分Cantor 集,则*m 0P =;(注意三分Cantor 集的构造) (2)设()f x 为定义在1[,]R a b ?上的黎曼可积函数, {}2()(,)(),[,]R p G f x y y f x x a b ==∈?, ()f x 在[,]a b 的图像,则*m ()0p G f =;(注意黎曼可积的充要条件的使用) (3)设n R E ?有内点,则*m 0E >; (4)(外侧度的介值性)设1R E ?为有界集,*m 0E >,则对任意*0m c E ≤≤,存在1E E ?,使得,*1m E c =;(注意构造适当的连续函数,利用连续函数的介值

图论在交叉学科中的应用

数学科学学院 课程名称图论导引 题目图论在交叉学科中的应用姓名闫二路 学号 A01014134 专业数学与应用数学 授课老师汪毅

图论在交叉学科中的应用 [摘要]利用图论知识可以解决一些交叉学科中的实际问题。对于更好地理解问题,思考问题从而求解问题具有现实意义。图论知识的应用是相当广泛的,它是数学的重要分支,使今年来较为活跃的数学分支,它是源于生活,高于生活。图论作为组合数学的一分支,与其他数学分支,如信息论,矩阵论都有着重要的联系。 [关键字] 树、即时码、hamilton圈、Hamilton路 1.即时码的树图构造法 即时码定义:在唯一可译变长码中,有一类码,它在译码时无须参考后续的码符号就能立即做出判断,译成对应的信源符号,则这类码称为即时码。 树的定义:一个图G若是无圈的且连通,则称图G是树。 为了联系树与即时码的关系我们引入关于判断树的一个定理; 定理1:图G是树当且仅当G的任何两个顶点都被唯一的路连接。 从上述定理1我们可以判断利用树构造的码为即时码,如下图构造的即时码:

从上面我们可以得到码字集合C1={000,001,010,011,100,101,110,111},C2={00,01,02,10,11,12,20,210,211,212,220,221,222} 我们根据即时码的定义可得利用树构造的码都是即时码,我们也知道即时码一定是唯一可译码,因此树图能给我们带来比较方便的方法来构造即时码。 问题求解反思:我们从即时码的树图构造法中,我们得到:使用图论中的树我们能很容易得到信息论中即时码的一种构造方法,这里利用了交叉学科相互结合的思想,利用图我们能更好的理解一些实际问题,有利于我们的理解,从这个方面我们能得出图论在其他学科有着很重要的联系,有利于实际问题更好的解决。 2.Hamilton图的应用 Hamilton图的定义:一个含图G的每个顶点的圈称为是G的Hamilton 圈,这个含有Hamilton圈的图称为是一个Hamilton图。 Hamilton圈在现实中有着广泛的应用,当我们给出一个实际问题时,我们应该怎样Hamilton图来解决实际问题,这需要我们从联系实际

1040 【图论基础】求连通子图的个数 1041 【图论基础】求最小生成树(prim)

【图论基础】求连通子图的个数 Time Limit:10000MS Memory Limit:65536K Total Submit:42 Accepted:30 Description 求一个无向图中连通子图的个数。 Input 第一行一个数n,表示无向图的顶点的数量(n<=5000),接下来从第2行到第n+1行,每行有n个数(1表示相应点有直接通路,0表示无直接通路),形成一个n*n的矩阵,用以表示这个无向图。示例: Output 输出一个数,表示这个图含有连通子图的个数。 Sample Input 5 1 0 1 0 0 0 1 1 1 0 1 1 1 1 0 0 1 1 1 0 0 0 0 0 1 Sample Output 自己算吧! Source

?var ? i,j,n,ans,x:longint; ? a:array[1..5000,0..5000] of longint; ? b:array[1..5000] of boolean; ?procedure dfs(x:longint); ?var i:longint; ?begin ? b[x]:=false; ? for i:=1 to a[x,0] do if b[a[x,i]] then ? dfs(a[x,i]); ?end; ? ?begin ? readln(n); ? for i:=1 to n do ? for j:=1 to n do begin ? read(x); ? if x=1 then begin ? inc(a[i,0]); a[i,a[i,0]]:=j; ? end; ? end; ? fillchar(b,sizeof(b),true); ? for i:=1 to n do if b[i] then begin ? inc(ans); ? dfs(i); ? end; ? writeln(ans); ?end.

离散数学第七章图的基本概念知识点总结docx

图论部分 第七章、图的基本概念 7.1 无向图及有向图 无向图与有向图 多重集合: 元素可以重复出现的集合 无序积: A&B={(x,y) | x∈A∧y∈B} 定义无向图G=, 其中 (1) 顶点集V≠?,元素称为顶点 (2) 边集E为V&V的多重子集,其元素称为无向边,简称边. 例如, G=如图所示, 其中V={v1, v2, …,v5}, E={(v1,v1), (v1,v2), (v2,v3), (v2,v3), (v2,v5), (v1,v5), (v4,v5)} , 定义有向图D=, 其中 (1) V同无向图的顶点集, 元素也称为顶点 (2) 边集E为V?V的多重子集,其元素称为有向边,简称边. 用无向边代替D的所有有向边所得到的无向图称作D的基图,右图是有向图,试写出它的V和E 注意:图的数学定义与图形表示,在同构(待叙)的意义下是一一对应的

通常用G表示无向图, D表示有向图, 也常用G泛指 无向图和有向图, 用e k表示无向边或有向边. V(G), E(G), V(D), E(D): G和D的顶点集, 边集. n 阶图: n个顶点的图 有限图: V, E都是有穷集合的图 零图: E=? 平凡图: 1 阶零图 空图: V=? 顶点和边的关联与相邻:定义设e k=(v i,v j)是无向图G=的一条边, 称v i,v j 为e k的端点, e k与v i (v j)关联. 若v i ≠v j, 则称e k与v i (v j)的关联次数为1;若v i = v j, 则称e k为环, 此时称e k与v i 的关联次数为2; 若v i不是e k端点, 则称e k与v i 的关联次数为0. 无边关联的顶点称作孤立点. 定义设无向图G=, v i,v j∈V, e k,e l∈E,若(v i,v j) ∈E, 则称v i,v j相邻; 若e k,e l 至少有一个公共端点, 则称e k,e l相邻. 对有向图有类似定义. 设e k=?v i,v j?是有向图的一条边,又称v i是e k的始点, v j是e k的终点, v i邻接到v j, v j邻接于v i.