zoukankan      html  css  js  c++  java
  • 152.图论

      图论是近年来发展迅速而又应用广泛的一门新兴学科。它最早起源于一些数学游戏的难题研究。如1736年欧拉(L . Euler)所解决的哥尼斯堡七桥问题;以及在民间广为流传的一些游戏问题:例如迷宫问题、棋盘上马的行走路线问题等等。

      这些古老的问题当时吸引了许多学者的注意,从而在这些问题研究的基础上,又提出了著名的四色猜想和环游世界各国的问题。

      图论不断发展,它在解决运筹学,网络理论,信息论,控制论,博奕论以及计算机科学等各个领域的问题时,显示出越来越大的效果。

      对于这样一门应用广泛的学科,其包含的内容是丰富的,本篇我们只准备介绍基本的概念和定理,为今后有关学科及课程的学习和研究提供方便。

     

    1.图

     1.1定义

    定义:一个图 G 是一个三元组< V(G) , E(G) , ΦG >
           其中 V(G) 是非空的结点(顶点)集合,

      E(G) 是的集合,

      ΦG 是从边集 E 到结点偶对集合上的函数。

    讨论定义:
    (1) V(G) ={ v1 , v2 , … , vn }是非空的结点集合,vi 称为结点,简称V是点集

    (2) E(G)={e1 , … , em}为边的集合,ei 称为边,简称 E 为边集

    (3) ΦG 是从边集 E 到结点偶对集合上的函数。即对于每条边 ei ,都存在V中的结点偶对与之相对应。

      例如       ΦG (ei) = (vi , vj)

    (4) 定义中的结点偶对可以是有序偶对 <vi , vj> ,也可以是无序偶对 (vi , vj) 。

      ①若边 e 对应有序偶对 <vi , vj> ,则称边 e 是有向边(弧)

           结点 vi 称为有向边的起点,结点 vj 称为有向边的终点,统称为 e 的端点

         也称 e 是关联于结点vi 和 vj 的,结点vi 和 vj 是邻接的(相邻的)

      ②若边 e 对应无序偶对 (vi , vj),则称边 e 是无向边(棱)

    (5) 每条边都是有向边的图,称为有向图
       每条边都是无向边的图,称为无向图
    (6) 若令 e= <vi , vj> 或 e= (vi , vj),即以结点偶对来表示图的边,这样可把图简化成:
          G=<V,E >.

     

    专有名词:

    (1) ( n , m) 图:具有 n 个结点,m 条边的图。

    (2)有向完全图:在 n 个结点的有向图
      G = <V , E> 中,如果 E=V×V,则称G为有向完全图。

     例如

     

    注:对于有向简单完全图:其有向边条数 m= 2 Cn2 = n(n-1)  (除去自回路)

    (3)无向完全图:每两个结点之间均有连线的无向图。
        具有 n 个结点的无向完全图的边数为:m= Cn2 = n(n-1)/2

    例如

    (4)混合图:既有有向边,又有无向边的图。
    (5)互相邻接的边:连接于同一结点的二条(或若干条)边。

     例如

    (6) 自回路:图中起始且终止于同一结点的边。
    (自回路的箭头方向是没有意义的 )

    (7)多重边(平行边):二个结点之间方向相同的二条(多条)边。

     例如

     

    (8)含有多重边的图称为多重图,非多重图称为线图

      例如

     

    (9) 简单图:无自回路的线图称为简单图。
                   即简单图是没有自回路和多重边的图。

    (10) 赋权图G是一个三元组〈V , E , g〉或四元组〈V , E , f , g 〉,
    其中 V 为结点集合,E 为边的集合,f 是定义在集合 V上的函数,g 是定义在集合 E 上的函数。

    实际上,赋权图可以用一句话概括:每一条边或结点均注上数字的图(数字可以为整数、正实数)

     

    (11)孤立结点:不与任何结点相连接的结点。
    (12)零图:仅包含孤立结点的图,记为 ( n , 0 ).
    (13)平凡图:只有一个结点的图(1 , 0).

    1.2节点的次数

    1.2.1定义

    有向图 G 中,对于任何结点 v,
    ①以 v 为始点的边的条数,称为结点 v 的引出次数出度),记作 deg+(v) ;
    ②以 v 点为终点的边的条数称为 v 的引入次数入度),记作 deg-(v) ;
    ③结点 v 的引入次数和引出次数之和称为结点 v 的次数度数),记作 deg(v),即
    deg(v) = deg+(v) + deg-(v) .

    对于无向图

    结点 v 的度数等于与该结点 v 相关联的边的条数,也记为 deg(v) 。

    正则图:所有结点的度数均相同的简单无向图。

    例如

     1.2.2定理

    定理1

    设 G 是一个 (n , m) 图,它的结点集合为 V ={ v1 , v2 , … , vn } ,则

    即所有结点度数的总和等于边数的两倍。

    推论:

    在任何图中,
    (1) 所有结点的度数之和必为偶数;
    (2) 度数为奇数的结点必有偶数个。

    定理2

    在任何有向图中,所有结点的入度之和等于所有结点的出度之和。

    1.3路与回路

    1.3.1路径

    定义:

    在一个图中,从结点 v0 到结点 vn 的一条路径 P 是:图的一个点边交替序列
    ( v0 e1 v1 e2 v2 … en vn )。
    即从结点 v0 出发经过某些结点,而最终到达终点 vn 的点边交替序列称为图的路径

    讨论定义:
    ⑴ 从一个结点到某一结点的路径(若有的话),不一定是唯一的;

    例如:设有向图G,求起始于1,终止于3的路径。

     

    专有名词:

    (1)穿程全部结点的路径:经过图中所有结点的路径。
    (2)简单路径:在某一路径中,如果同一条边仅出现一次的路径。
    (3)基本路径:在某一路径中,如果同一顶点仅出现一次的路径。

    (4)回路:如果某路径的起点 v0 和终点vn 相重合,则称此路径为回路。
    (5)简单回路:通过每条边不超过一次的回路。
    (6)基本回路:通过每个结点不超过一次的回路。
    (7)非回路图:没有任何回路的简单有向图。

    讨论:

    ①回路不包含自回路。
    ②不是基本路径的任何路径都会包含回路,而去掉这些回路就可以得到基本路径。

    1.3.2路径的表示方法

    (a)边的序列表示法:设G = <V , E> 为一有向图,vi ∈ V ,则路径可以表示成:
          (< v1 , v2 > , < v2 , v3 > , … , < vk-1 , vk >)
    (b)结点表示法: 在非多重图中,也可用顶点序列 (v1 , v2 , … , vk ) 表示路径。

    1.3.3路径长度

     若两个结点之间有一条路经P,则路径 P 的长度|P|=P中边的条数。

    1.4图的性质

    1.4.1可达性

    定义: 

    设图G为简单有向图,且 vi , vj V,若从 vi 到 vj 存在任何一条路径的话,则称 vi 到 vj 是可达的

     注:

    可达性一定满足:自反性;可传递性

    定义:

     从 vi 到 vj 的最短路径的长度称为距离,并记作: d<vi , vj> 

    讨论定义:
    (1) d<vi , vi> = 0
    (2) d<vi , vj> ≥ 0
    (3) d<vi , vj> + d<vj , vk> ≥ d<vi , vk>
    (4)规定:若 vi 到 vj 是不可达的,则d<vi , vj> = ∞.
    (5) 在有向图中,若 vi 到 vj 是可达的,且 vj 到 vi 也是可达的,
         但 d<vi,vj> 不一定等于 d<vj, vi>。

    例如

    d< c, a > = 1,
    d< a, c > = 2

     

    1.4.2联通性

    定义:

     对于无向图 G,如果任何两个结点是相互可达的,则称图G是连通的

     对于有向图来讲,如果两结点均是互相可达的,则称此图是强连通的

     若图中任何结点偶对中至少有一点到另一结点是可达的,则称此图是单侧连通

     对于简单有向图的伴随无向图(底图),若是连通的,则称此图为弱连通

    注:伴随无向图即为去掉箭头方向的图。

     定理:

    一个有向图是强连通的充要条件是它包含一个回路,且该回路至少包含每个结点一次

    定义:

    设G = <V , E>为一简单有向图,且G’是G的子图。

    对于某一性质而言,若没有其他包含G’的子图具有这种性质,

    则称子图G’是相对于该性质的极大子图

    具有强连通性质的极大子图G’称为强分图
    具有单侧连通性质的极大子图G’称为单侧分图
    具有弱连通性质的极大子图G’称为弱分图

    定理:

    在任一简单有向图G=<V,E>中,有向图的每一个结点恰好处于一个强分图之中。

    1.5图的矩阵表示

    矩阵是研究图的有关性质的最有效的工具,可运用图的矩阵运算求出图的路径、回路和其它一些性质

    1.5.1图的邻接矩阵表示

    定义:

    设G = <V , E>是简单有向图,其中V={v1, v2, … , vn}。定义一个 nn 的矩阵 A,并把其中各元素 aij 表示成:

    则称矩阵 A 为图 G 的邻接矩阵

    例如:设图 G = <V , E>
    如图所示

    则图 G 的邻接矩阵为

     

    讨论定义:

    ⑴ 图G的邻接矩阵中的元素为0和1,
    ∴又称为布尔矩阵;

    ⑵ 图G的邻接矩阵中的元素的次序是无关紧要的,

    只要做 行和行、列和列的交换,则可得到相同的矩阵。

    ∴若有二个简单有向图,则可得到二个对应的邻接矩阵,

    若对某一矩阵做行和行、列和列之间的交换后得到和另一矩阵相同的矩阵,则此二图同构。

    ⑶ 当有向图中的有向边表示关系时,邻接矩阵就是关系矩阵;
    ⑷ 零图的邻接矩阵称为零矩阵,即矩阵中的所有元素均为0;

    ⑸ 在图的邻接矩阵中,
    ①行中1的个数就是行中相应结点的引出次数(出度).
    ②列中1的个数就是列中相应结点的引入次数(入度).

    1.5.2 矩阵的计算

    设有向图 G = <V , E>的邻接矩阵为 A,

    则G的逆图 = <V , > 的邻接矩阵就是 AT

     

    1.5.2.1AAT 的元素的意义

    设有向图 G = <V , E> 的邻接矩阵为 A,并令 B = AAT,则

     

    分析:元素 aik = 1 意味着存在边<vi , vk> .
      元素 ajk = 1 意味着存在边<vj , vk> .

    结论:如果从结点 vi 和 vj 两者引出的边,能共同终止于某些结点 vk ,则这些终止结点 vk 的数目就是 bij 的值,

      特别地,当 i = j 时,元素 bii 的值就是结点 vi 的引出次数

     

    主对角线上的数,表示结点 i 的引出次数。

    1.5.2.2ATA 的元素的意义

    设有向图 G = <V , E> 的邻接矩阵为 A,并令 B = ATA,则

     

    分析:元素 aki = 1 意味着存在边<vk , vi> .
      元素 akj = 1 意味着存在边<vk , vj> .

    结论:如果从某些结点 vk引出的边,能同时终止于结点 vi 和 vj ,则这些起始结点 vk 的数目就是 bij 的值,

      特别地,当 i = j 时,元素 bii 的值就是结点 vi 的引入次数

     

    主对角线上的数,表示结点 i 的引入次数

     1.5.2.3A(n) 的元素的意义

     设有向图 G = <V , E> 的邻接矩阵为  A = ( aij ),则 A(2) 的元素

    分析:元素 aik = 1 意味着存在边<vi , vk> .
      元素 akj = 1 意味着存在边<vk , vj> .

    所以,元素 aij(2) 的值表示从结点 vi 到 vj 存在长度为 2 的不同路径的条数。

    结论: A(n) 的元素 aij(n) 的值表示从结点 vi 到 vj 存在长度为 n 的不同路径的条数。
    特别,对角线上的元素 aii(n) 表示经过结点 vi的长度为 n 的不同回路的条数。

     例如

    A2 表示 i 和 j 之间具有长度为2的路径数

    A3 表示 i 和 j 之间具有长度为3的路径数

    A表示 i 和 j 之间具有长度为4的路径数

    1.5.2.4可达性矩阵

     

    注:bij 表示从结点 vi 到 vj 有长度分别为 1,2,3,4 的不同路径总数。
    此时, bij ≠ 0,表示从 vi 到 vj 是可达的。
    bij = 0,表示从 vi 到 vj 是不可达的。因此, bij 表明了结点间的可达性。

     定义:

    设 G = <V , E> 是简单有向图,其中 |V|=n( n  I+),定义一个 nn 矩阵 P,它的元素为:

    则P称为图G的可达性矩阵

    注:由矩阵 Bn 可计算出可达性矩阵 P,其方法是:若 Bn中(i , j)元是非“0”元素,则令对应的 pij = 1,否则令 pij = 0 。

     例如:若

     

    1.5.2.5可完全关联矩阵

     定义:

    设无向图G = <V , E> ,
    V = {v1 , v2 , … , vn}, E = {e1 , e2 , … , em},
    令 B = ( bij )n×m,其中

     

    则称B为无向图G的完全关联矩阵

    讨论定义:

    ⑴ 完全关联矩阵为布尔矩阵;
    ⑵ 对应B中行均为0的结点为孤立结点,只有一个“1”的行的结点一定为悬挂的边,且一定不在任一回路中;
    ⑶ 全部为1的行的结点必定联结图中所有的结点。

    例如

     

    1.6特殊图

    1.6.1欧拉图

    定义:

    欧拉路径:穿程于图 G 的每条边一次且仅一次的路径。
    欧拉回路:穿程于图 G 的每条边一次且仅一次的回路。
    欧拉图:具有欧拉回路的图。

    定理:

     无向连通图 G 具有一条欧拉路径,当且仅当 G 具有零个或两个奇数度数的结点。

    推论:

    无向连通图 G 具有一条欧拉回路(欧拉图),当且仅当图G 所有结点度数全为偶数。

    例如:用定理解决哥尼斯堡桥的问题

     

    定理:

    有向连通图 G 具有欧拉回路,当且仅当 G中每一个结点的引入次数等于引出次数,即Deg+(v)= Deg-(v) .

     定理:

    有向连通图 G 具有欧拉路径,当且仅当除了二个结点(其中一个的引入次数比引出次数大1,

    另一个的引入次数比引出次数小1)以外的所有结点的引入次数等于引出次数,即Deg+(v)= Deg-(v) .

     1.6.2 哈密尔顿图

    定义

    哈密尔顿路径:穿程于无向图 G 的每一个结点一次且仅一次的路径。
    哈密尔顿回路:穿程于无向图 G 的每一个结点一次且仅一次的回路。
    哈密尔顿图:具有哈密尔顿回路的图。

    到目前为止,还没有找到哈密尔顿路径存在的充分必要条件。下面介绍两个定理。

    定理:

    设 G = < V , E > 是具有n 个结点的简单无向图,若在 G 中每一对结点次数之和大于或等于(n-1),

    则在 G 中一定存在一条哈密尔顿路径。

     注:此定理是充分条件,而不是充分必要条件

    例如:n=7,G = <V , E > 见图:每对结点次数为4<7-1=6,但确有一条汉密尔顿路径。

     

    定理:

    若图 G = < V , E > 是哈密尔顿图,则对于结点集 V 的每个非空真子集 S 均有
    W( G ―S ) ≤ |S| 成立,
    其中 W(G-S) 表示从G中删除S后,所得图的连通分图个数; |S| 表示 S 中的结点数。

    2.树与生成树

    2.1无向树(树)

    2.1.1定义

    连通的且无简单回路的无向图称为无向树,简称

     

    专用名词
    树叶(终点):树中度数为1的结点。
    分枝点(内点):树中度数大于1的结点。
    森林:每个连通分图均为树的无向图。

    2.1.2树的性质

    设T是一棵树,vi,vj 为T中两个不同的结点,则:
    1) vi 和 vj 仅有一条路径相连通。
    2) 在T中加一条边{ vi , vj },则由此而形成 的图,仅有一个回路。

    在一棵(n , e)树中有e=n-1。(n表示结点数,e表示边数)

    设F是由 t 棵树组成的(n , e)森林,则有e=n-t。

    在结点大于2的(n , e)树中,所有结点的度数之和为2(n-1)

    在任一(n ≥ 2)的树T中,至少有二片树叶。

    2.2生成树

    2.2.1定义

    一个无向图G的生成子图是树TG,则称TG是G的生成树(支撑树)。

    讨论定义:

    1) G的生成树不是唯一的。

    2)如何在连通图G中寻找一棵生成树:

    ①若G没有循环,则G本身就是一棵树;

    ②若G仅有一条循环,从此循环中删去一条边,仍保持图的连通性,得到一棵生成树。

    ③若G有多条循环,则逐个对每条循环重复②中操作,直到打断G中所有循环,得到一棵生成树为止。

    定理:

    任何连通无向图至少有一棵生成树

    给定一个连通图,寻找其生成树的数目是图论中树的计数问题

    含 n (n>1)个结点的标记完全图Kn 有 nn-2 棵标记生成树

    定义:

    生成树T中的边称为树枝,不在生成树T中但属于图G的边,称为树T的弦,弦的集合称为树T的补。

    在一个连通赋权图中,树枝的权之和为最小的生成树称为最小生成树。

    Kruskal算法:

    设G有n个结点,m条边,先将G中所有边按权的大小次序进行排列,不妨设:

    W(e1) < W(e2) < … < W(em),

    ①k←1,A←Ø。

    ②若AU{ek}导出的子图中不包含简单循环,则A ← A U{ek}

    ③若A中已有n-1条边,则算法终止,否则K← K+1,转至②。

    这一算法假设G中权均不相同,对于边权任意情况也完全适用。这时求得的最小生成树不唯一

    2.3有向树与根树

    定义:

    若有向图在不考虑边的方向时是一棵树,称之为有向树。

    定义:

    一棵有向树,如果恰有一个结点的入度为0,其余所有结点的入度都为1,则称为根树。入度为0的结点称为根,出度为0的结点称为叶,出度不为0的结点称为分枝点或内点。任何结点的级(高度)是从根出发到该结点的路径长度(边的条数)。

    定义:

    指明了根树中结点或边的次序的树为有序树。在有序树中,如每个结点有明确级,同一级的结点排在同一行,并明确它们位置,则这样的树称位置树

    定义:

    在根树中,若每一个结点的出度小于或等于m,则称这棵树为m叉树。若每个结点的出度恰好等于m或零,则称这棵树为完全m叉树,若其所有树叶层次相同,称为正则m叉树。

    特别,当m=2时,称为二叉树。

    很多实际问题可用二叉树或m叉树表示。任何一棵有序树都可以把它改写为一棵对应的二叉树。

    定义:

    在有向树T中,由结点V和它的所有子孙所构成的结点子集V’以及从V出发的所有有向路中的边所构成的边集E’组成T的子图

    方法:

    设有序树T中结点Vi 的r棵子树有根Vi1, Vi2 , …, Vir,其顺序自左向右,则在二叉树T’中Vi1是Vi 的左儿子,Vi2是Vi1的右儿子,Vi3是Vi2的右儿子….,Vir是Vir-1的右儿子。

     

     

     

     

  • 相关阅读:
    界面开发注意要素,降低界面BUG
    软件测试及其重要性
    浅谈自动化测试工具之Selenium
    浅谈探索式软件测试
    浅谈功能测试流程
    关于软件测试中测试用例的重要性
    第1章 性能测试整体认知
    数据库对比,优化
    2、补充介绍
    1、MarkDown基本语法
  • 原文地址:https://www.cnblogs.com/ZanderZhao/p/11032037.html
Copyright © 2011-2022 走看看