图论(附带欧拉通/回路和哈密顿通/回路算法)

概论

图论(附带欧拉通/回路和哈密顿通/回路算法)_第1张图片
图论起源于 18 世纪。第一篇图论论文是瑞士数学家欧拉于 1736 年发表的“哥尼斯堡的七座桥”。 1847 年,克希霍夫为了给出电网络方程而引进了“树”的概念。 1857年,凯莱在计数烷CnH 2n+2 的同分异构物时,也发现了“树”。哈密尔顿于 1859 年提出“周游世界”游戏,用图论的术语,就是如何找出一个连通图中的生成圈、近几十年来,由于计算机技术和科学的飞速发展,大大地促进了图论研究和应用,图论的理论和方法已经渗透到物理、化学、通讯科学、建筑学、运筹学,生物遗传学、心理学、经济学、社会学等学科中。
图论中所谓的“图”是指某类具体事物和这些事物之间的联系。如果我们用点表示这些具体事物,用连接两点的线段(直的或曲的)表示两个事物的特定的联系,就得到了描述这个“图”的几何形象。图论为任何一个包含了一种二元关系的离散系统提供了一个数学模型,借助于图论的概念、理论和方法,可以对该模型求解。哥尼斯堡七桥问题就是一个典型的例子。 在哥尼斯堡有七座桥将普莱格尔河中的两个岛及岛与河岸联结起来,问题是要从这四块陆地中的任何一块开始通过每一座桥正好一次,再回到起点.
图论(附带欧拉通/回路和哈密顿通/回路算法)_第2张图片
当然可以通过试验去尝试解决这个问题,但该城居民的任何尝试均未成功。欧拉为了解决这个问题,采用了建立数学模型的方法。他将每一块陆地用一个点来代替,将每一座桥用连接相应两点的一条线来代替,从而得到一个有四个“点”,七条“线”的“图”。问题成为从任一点出发一笔画出七条线再回到起点。欧拉考察了一般一笔画的结构特点,给出了一笔画的一个判定法则:这个图是连通的,且每个点都与偶数线相关联,将这个判定法则应用于七桥问题,得到了“不可能走通”的结果,不但彻底解决了这个问题,而且开创了图论研究的先河。
图与网络是运筹学( Operations Research)中的一个经典和重要的分支,所研究的问题涉及经济管理、工业工程、交通运输、计算机科学与信息技术、通讯与网络技术等诸多领域。下面将要讨论的最短路问题、最大流问题、最小费用流问题和匹配问题等都是图与网络的基本问题。
图论(附带欧拉通/回路和哈密顿通/回路算法)_第3张图片
我们首先通过一些例子来了解网络优化问题。

例 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 中相邻。

太绕了,全是公式和文字…

有向图

  • 有向图
    • 简单有向图
    • 有向多重图
      | 类型 | 边 | 允许多重边 | 允许环 |
      | — | — | — | — |
      | 简单图 | 无向 | 否 | 否 |
      | 多重图 | 无向 | 是 | 否 |
      | 伪图 | 无向 | 是 | 是 |
      | 简单有向图 | 有向 | 否 | 否 |
      | 有向多重图 | 有向 | 是 | 是 |
      | 混合图 | 有向+无向 | 是 | 是 |

图论(附带欧拉通/回路和哈密顿通/回路算法)_第4张图片

图的术语和几种特殊的图

基本术语

  • 无向图

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作为起点的边数。

无向图顶点的度

图论(附带欧拉通/回路和哈密顿通/回路算法)_第5张图片

握手定理

Theorem 1 (Handshaking Theorem):
设G=(V,E)是有e条边的无向图,则
image.png
Proof:
每条边对两个顶点各贡献一次度,所以一共贡献两次。
等式两边均等于边数的两倍。
图论(附带欧拉通/回路和哈密顿通/回路算法)_第6张图片

  • 举例:

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:奇数度顶点,则
图论(附带欧拉通/回路和哈密顿通/回路算法)_第7张图片

Theorem 3: 设G = (V, E) 是有向图,则
image.png
Proof: 顶点出度之和等于入度之和,等于边数。

特殊的简单图

圈图Cycles

图论(附带欧拉通/回路和哈密顿通/回路算法)_第8张图片

轮图Wheels

图论(附带欧拉通/回路和哈密顿通/回路算法)_第9张图片

n立方图n-Cubes

图论(附带欧拉通/回路和哈密顿通/回路算法)_第10张图片

偶图Bipartite Graphs

Definition:若把图_G_的顶点分成两个不相交的非空集合V1_和_V2,使得图里的每一条边都连接着_V1_和_V2_的一个点。
图论(附带欧拉通/回路和哈密顿通/回路算法)_第11张图片

偶图的判定

**Theorem 4:**图中的每个顶点可被赋以两种不同的颜色,并且相邻接的顶点颜色不同,则该简单图为偶图。
Proof: 若图G = (V, E) 为偶图,那么V = V1 ∪ V2,对V1的点赋予一种颜色,对V2 则赋予另一种颜色,则相邻接的点不会被赋予相同的颜色。
图论(附带欧拉通/回路和哈密顿通/回路算法)_第12张图片

完全偶图Complete Bipartite Graphs

Definition: 完全偶图Km,n 的顶点集可分为两个非空子集,分别含有m和n个顶点,两个顶点之间有边当且仅当两个顶点分别属于两个子集。
图论(附带欧拉通/回路和哈密顿通/回路算法)_第13张图片

偶图与匹配

简单图的匹配是该图边集的一个子集,该子集中没有两条边与同一个顶点相关联【每个顶点的度不大于1】。
最大匹配是所含边数最多的匹配。
示例:任务分配和婚姻

从旧图到新图

图论(附带欧拉通/回路和哈密顿通/回路算法)_第14张图片

图的表示和图的同构

  • 邻接表Adjacency Lists
  • 邻接矩阵Adjacency Matrices
  • 关联矩阵Incidence Matrices
  • 图的同构 Isomorphism of Graphs

图的表示:邻接表

Definition: 邻接表(adjacency list)可用于表示不带多重边的图,它规定与图的每个顶点相邻的顶点
图论(附带欧拉通/回路和哈密顿通/回路算法)_第15张图片

图的表示:邻接矩阵

简单图

图论(附带欧拉通/回路和哈密顿通/回路算法)_第16张图片

多重图和伪图

图论(附带欧拉通/回路和哈密顿通/回路算法)_第17张图片
图论(附带欧拉通/回路和哈密顿通/回路算法)_第18张图片

图的表示:关联矩阵

图论(附带欧拉通/回路和哈密顿通/回路算法)_第19张图片
图论(附带欧拉通/回路和哈密顿通/回路算法)_第20张图片
图论(附带欧拉通/回路和哈密顿通/回路算法)_第21张图片

图的同构

图论(附带欧拉通/回路和哈密顿通/回路算法)_第22张图片
图论(附带欧拉通/回路和哈密顿通/回路算法)_第23张图片
如果两个图中只有一个图具有某个属性,且该属性只在讨论同构中使用,则可以说这两个图不同构。这种属性被称为图的非变体性。包括:

  • 顶点数 number of vertices
  • 边数 number of edges
  • 对应顶点的度 degree sequence

图论(附带欧拉通/回路和哈密顿通/回路算法)_第24张图片
图论(附带欧拉通/回路和哈密顿通/回路算法)_第25张图片
图论(附带欧拉通/回路和哈密顿通/回路算法)_第26张图片

连通性

  • 通路Paths
  • 无向图的连通性Connectedness in Undirected Graphs
  • 有向图的连通性Connectedness in Directed Graphs
  • 通路与同构Paths and Isomorphism
  • 计算顶点之间的通路数Counting Paths between Vertices

通路Path

**Informal Definition: **通路是边的序列,它从图的一个顶点开始,并且行经图的边,总是连接相邻的顶点对。
Applications

  • 确定两台计算机之间是否可以互相发送消息
  • 邮件投递

图论(附带欧拉通/回路和哈密顿通/回路算法)_第27张图片
图论(附带欧拉通/回路和哈密顿通/回路算法)_第28张图片

连通分支

Definition: 不连通的图是2个或2个以上连通子图之并,每一对子图都没有公共的顶点。这些不相交的连通子图称为图的连通分支。
Example: 图_H_的连通分支是_H_1, _H_2和_H_3

割点和割边

图论(附带欧拉通/回路和哈密顿通/回路算法)_第29张图片
图论(附带欧拉通/回路和哈密顿通/回路算法)_第30张图片
图论(附带欧拉通/回路和哈密顿通/回路算法)_第31张图片

有向图的连通性

Definition: 若每当a和b都是一个有向图里的顶点时,就有从a到b和从b到a的通路,则该图是强连通的。
Definition: 若在有向图的底无向图里,任意两个顶点之间都有通路,则该有向图是弱连通的。有向图是弱连通的,当且仅当忽略边的方向时,任何两个顶点之间总是存在通路。
Definition: 有向图G的子图是强连通的而不包含在更大的强连通子图中,即极大强连通子图,可称之为G的强连通分支或强分支。
图论(附带欧拉通/回路和哈密顿通/回路算法)_第32张图片

计算顶点之间的通路数

Theorem: 设G是带有相对于顶点顺序_v_1_, … , vn_的邻接矩阵A的图(允许有向或无向,多重边和环),从_vi_到_vj_, 的长度为r的不同通路数目等于A_r_的第(i,j)项(_r >_0)
图论(附带欧拉通/回路和哈密顿通/回路算法)_第33张图片
图论(附带欧拉通/回路和哈密顿通/回路算法)_第34张图片

欧拉和哈密顿图

Definition: 欧拉回路是包含着G的每一条边的简单回路。
欧拉通路是包含着G的每一条边的简单通路。
Example: 下列哪个图有欧拉回路或欧拉通路。
图论(附带欧拉通/回路和哈密顿通/回路算法)_第35张图片
Solution:
G1 有欧拉回路(a, e, c, d, e, b, a).
G3 无欧拉回路但有欧拉通路 (a, c, d, e, b, d, a, b)
G2 既无欧拉回路也无欧拉通路

欧拉回路与通路的必要条件(针对边)

  • 欧拉回路:回路经过一个顶点,必要离开这个顶点。因此每个顶点有进来的边,必有出去的边,每条边为每个顶点贡献2度。所以每个顶点的度必为偶数。
  • 欧拉通路:除起始和终止的顶点外,度必为偶数。

注:是偶数,不一定只是2

欧拉回路构造算法

图论(附带欧拉通/回路和哈密顿通/回路算法)_第36张图片
图论(附带欧拉通/回路和哈密顿通/回路算法)_第37张图片

弗留利算法

  1. 空栈和空回路开始.
  • 如果所有顶点的度都为偶数,则任选起始顶点
  • 如果恰好有2个奇数度顶点,则任选其一为起始顶点
  • 否则不存在欧拉图
  1. 从顶点选择边进行遍历
  • 如果当前顶点没有边,从栈中删除最后的顶点,并把它作为当前顶点
  • 否则,把该顶点加到栈中,选择不是割边的边,删除这条边,并将另一个关联顶点作为当前顶点
    重复步骤2,直到没有剩余的边
    【图的深度优先遍历DFS】

图论(附带欧拉通/回路和哈密顿通/回路算法)_第38张图片
图论(附带欧拉通/回路和哈密顿通/回路算法)_第39张图片
可简单看作:选择初始点,然后观察与这个初始点相关联的点,假如删除他们之间的边之后,初始点不是孤立点,那么就把这个边删掉,然后把原来的初始点塞到Stack栈中,把相关联的点塞到Location中,
如果删除边之后,点成为了孤立点,就暂时先不考虑这个点和它们之间的边的删除,
Location上的点,只有一条割边可以删的话,就把它放到Circuit中,以此类推
图论(附带欧拉通/回路和哈密顿通/回路算法)_第40张图片
把circuit里的元素取个逆序,就是欧拉回路
算法复杂度为O(m+n),m为顶点数,n为边数。
图论(附带欧拉通/回路和哈密顿通/回路算法)_第41张图片
都是偶数度,任意选个顶点就好了。
到A以后不能选AB,要不然移除AB后就变成两个连通子图了。AB是割边。

欧拉通路

图论(附带欧拉通/回路和哈密顿通/回路算法)_第42张图片

哈密顿通路与回路(针对点)

图论(附带欧拉通/回路和哈密顿通/回路算法)_第43张图片
图论(附带欧拉通/回路和哈密顿通/回路算法)_第44张图片
Example: 以下哪个简单图具有哈密顿回路,或者没有哈密顿回路但是有哈密顿通路。
图论(附带欧拉通/回路和哈密顿通/回路算法)_第45张图片
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: 通信成本(月租费);计算机响应时间;计算机之间的距离;

最短通路算法

图论(附带欧拉通/回路和哈密顿通/回路算法)_第46张图片
图论(附带欧拉通/回路和哈密顿通/回路算法)_第47张图片
图论(附带欧拉通/回路和哈密顿通/回路算法)_第48张图片
图论(附带欧拉通/回路和哈密顿通/回路算法)_第49张图片
图论(附带欧拉通/回路和哈密顿通/回路算法)_第50张图片
这个算法后面我会分出来一个文章来讲

弗洛伊德算法

图论(附带欧拉通/回路和哈密顿通/回路算法)_第51张图片
图论(附带欧拉通/回路和哈密顿通/回路算法)_第52张图片
图论(附带欧拉通/回路和哈密顿通/回路算法)_第53张图片
图论(附带欧拉通/回路和哈密顿通/回路算法)_第54张图片

你可能感兴趣的:(生信方法,数据结构(Java版),图论,算法,数据结构)