图论起源于 18 世纪。第一篇图论论文是瑞士数学家欧拉于 1736 年发表的“哥尼斯堡的七座桥”。 1847 年,克希霍夫为了给出电网络方程而引进了“树”的概念。 1857年,凯莱在计数烷CnH 2n+2 的同分异构物时,也发现了“树”。哈密尔顿于 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)或网络流规划等。
一个无向图(undirected graph)G 是由一个非空有限集合V (G) 和V (G) 中某些元素的 无 序 对 集 合 E(G) 构 成 的 二元组 , 记为 G = (V (G), E(G)) 。 其中V (G) = {v1,v2,L,vn} 称为图G 的顶点集( vertex set)或节点集( node set), V (G) 中的 每 一个 元素 vi (i = 1,2,L,n) 称 为该 图的 一 个顶 点( vertex ) 或 节 点( node ) ;E(G) = {e1,e2,L,em}称为图G 的边集( edge set), E(G) 中的每一个元素 ek (即V (G)中某两个元素vi,v j 的无序对) 记为 ek = (vi,v j ) 或 ek = viv j = v jvi (k =1,2,L,m) ,被称为该图的一条从 vi 到 v j 的边( edge)。
当边ek = viv j 时,称 vi,v j 为边 ek 的端点,并称 v j 与 vi 相邻( adjacent);边 ek 称为与顶点vi,v j 关联( incident)。如果某两条边至少有一个公共端点,则称这两条边在图G 中相邻。
太绕了,全是公式和文字…
Definition 1. u和v是无向图G中的一条边的两个端点,则称u和v在图G中邻接(相邻)。 边e 称为关联顶点u和v ,也可以说e连接u和v 。
Definition 2. 无向图里顶点的度是与该顶点关联的边的数目,记作deg(v)。
Definition 3. (u,v)是有向图G中的一条边,则称u邻接到v ,或v从u邻接。 u是边(u,v)的起点,v为终点 。
Definition 4. 有向图里顶点v的入度deg−(v)是v作为终点的边数,出度deg+(v)是v作为起点的边数。
Theorem 1 (Handshaking Theorem):
设G=(V,E)是有e条边的无向图,则
Proof:
每条边对两个顶点各贡献一次度,所以一共贡献两次。
等式两边均等于边数的两倍。
Example: 10个顶点且每个顶点的度为6的无向图,有多少边?
Solution: 2e = 6*10,所以e = 30。
Example: 如果一个无向图有5个顶点,判断每个顶点的度是否可为3。
Solution: 若度为3,则3 * 5 = 15 = 2e, 边为7.5,是不可能的。所以不可能。
Theorem 2: 无向图有偶数个奇数度顶点。
Proof: 在无向图G = (V, E) 中,e条边。V1 :偶数度顶点,V2:奇数度顶点,则
Theorem 3: 设G = (V, E) 是有向图,则
Proof: 顶点出度之和等于入度之和,等于边数。
Definition:若把图_G_的顶点分成两个不相交的非空集合V1_和_V2,使得图里的每一条边都连接着_V1_和_V2_的一个点。
**Theorem 4:**图中的每个顶点可被赋以两种不同的颜色,并且相邻接的顶点颜色不同,则该简单图为偶图。
Proof: 若图G = (V, E) 为偶图,那么V = V1 ∪ V2,对V1的点赋予一种颜色,对V2 则赋予另一种颜色,则相邻接的点不会被赋予相同的颜色。
Definition: 完全偶图Km,n 的顶点集可分为两个非空子集,分别含有m和n个顶点,两个顶点之间有边当且仅当两个顶点分别属于两个子集。
简单图的匹配是该图边集的一个子集,该子集中没有两条边与同一个顶点相关联【每个顶点的度不大于1】。
最大匹配是所含边数最多的匹配。
示例:任务分配和婚姻
Definition: 邻接表(adjacency list)可用于表示不带多重边的图,它规定与图的每个顶点相邻的顶点。
如果两个图中只有一个图具有某个属性,且该属性只在讨论同构中使用,则可以说这两个图不同构。这种属性被称为图的非变体性。包括:
**Informal Definition: **通路是边的序列,它从图的一个顶点开始,并且行经图的边,总是连接相邻的顶点对。
Applications:
Definition: 不连通的图是2个或2个以上连通子图之并,每一对子图都没有公共的顶点。这些不相交的连通子图称为图的连通分支。
Example: 图_H_的连通分支是_H_1, _H_2和_H_3
Definition: 若每当a和b都是一个有向图里的顶点时,就有从a到b和从b到a的通路,则该图是强连通的。
Definition: 若在有向图的底无向图里,任意两个顶点之间都有通路,则该有向图是弱连通的。有向图是弱连通的,当且仅当忽略边的方向时,任何两个顶点之间总是存在通路。
Definition: 有向图G的子图是强连通的而不包含在更大的强连通子图中,即极大强连通子图,可称之为G的强连通分支或强分支。
Theorem: 设G是带有相对于顶点顺序_v_1_, … , vn_的邻接矩阵A的图(允许有向或无向,多重边和环),从_vi_到_vj_, 的长度为r的不同通路数目等于A_r_的第(i,j)项(_r >_0)
Definition: 欧拉回路是包含着G的每一条边的简单回路。
欧拉通路是包含着G的每一条边的简单通路。
Example: 下列哪个图有欧拉回路或欧拉通路。
Solution:
G1 有欧拉回路(a, e, c, d, e, b, a).
G3 无欧拉回路但有欧拉通路 (a, c, d, e, b, d, a, b)
G2 既无欧拉回路也无欧拉通路
注:是偶数,不一定只是2
可简单看作:选择初始点,然后观察与这个初始点相关联的点,假如删除他们之间的边之后,初始点不是孤立点,那么就把这个边删掉,然后把原来的初始点塞到Stack栈中,把相关联的点塞到Location中,
如果删除边之后,点成为了孤立点,就暂时先不考虑这个点和它们之间的边的删除,
Location上的点,只有一条割边可以删的话,就把它放到Circuit中,以此类推
把circuit里的元素取个逆序,就是欧拉回路
算法复杂度为O(m+n),m为顶点数,n为边数。
都是偶数度,任意选个顶点就好了。
到A以后不能选AB,要不然移除AB后就变成两个连通子图了。AB是割边。
Example: 以下哪个简单图具有哈密顿回路,或者没有哈密顿回路但是有哈密顿通路。
Dirac’s Theorem: 如果_G_是带n个顶点的连通简单图,其中_n ≥ _3,并且G中每个顶点的度都至少为 n/2,则其有哈密顿回路
Ore’s Theorem:如果_G_是带n个顶点的连通简单图,其中_n ≥ _3,并且对于G中每一对不相邻的顶点u和v来说,都有deg(u) + deg(v**) ≥ **n,则其有哈密顿回路
Definition: 给每条边赋上一个数的图为带权图。带权图里的一条通路的长度是这条通路上各边的权的总和。(通路的长度?)
Example: 通信成本(月租费);计算机响应时间;计算机之间的距离;