zoukankan      html  css  js  c++  java
  • 邻接矩阵

    视频笔记:https://www.bilibili.com/video/BV1cs411H7sz?t=38&p=48  (电子科技大学)

    一,定义

    设图 G =< V,E >,其中 V = {v1,v2,··· ,vn}, 并假定结点已经有了从 v1 到 vn 的次序,

    则 n 阶 方阵 AG = (aij)nxn 称为 G 的邻接矩阵 (adjacency matrix),其中 ,(i,j = 1,2,3,··· ,n)

    aij =   {    1   < vi,vj >∈E 或 (vi,vj) ∈E  ,

              {    0   否则 

    这里的定义可同时表示 有向图 和 无向图 ,

    但这个 邻接矩阵 ,他这里只用了 1 ,只表示一条边,是简单图,

    我们教材是可以表示 多条边的,可以是 多重图

    二,求补图

    补图:设 G =< V,E > 为简单图,G′ =< V,E1 > 为完全图,

    则称G1 =< V,E1 −E >为 G 的补图(complement of graph),记为G(上面有道横线)。

    若设 简单图 G 的邻接矩阵 A = (aij)n×n,则它的补图 G 的邻接矩阵 A(上面有个横线) = ( aij (a 的上面有个横线) )n×n 为:

    aij (a 的上面有个横线) =  {   1−aij i̸= j

                  { 0   i = j ,      (i,j = 1,2,3,··· ,n)

    注意 前提是 简单图。

    三。计算度数 

    设图 G =< V,E >,V = {v1,v2,··· ,vn} 的邻接矩阵为
          
    A =    a11 a12 ··· a1n

        a21 a22 ··· a2n

        . . . . . . . . .

        an1 an2 ··· ann


       若 G 是无向图,则结点 vi 的度数 deg(vi) = n ∑ k=1 ( aik +aii )  ,或 deg(vi) = n ∑ k=1 ( aki +aii )

      若 G 是有向图,则结点 vi 的出度 deg+(vi) = n ∑ k=1 ( aik ),入度 deg−(vi) = n ∑ k=1 ( aki )

    ( 无向图的 aii 代表环,在计算 度数 时,要计算两遍 )

    四,通路数量的计算

    1,引入

    我们经常会考虑如下的问题:

    有多少种方式可从成都到达北京?

    猫头鹰和松鼠之间的间接食物竞争有哪些方式?

    报文有多少种方式可从 A 计算机发送到距离很远的 B 计算机?

    这些问题都可以归结为求图中任何两个结点间有多少条长度为 m 的通路的问题。 若使用人工方式,随着图中结点和边的数目增加,其难度将呈几何级数增加。

    而 利用计算机,我们可以较为容易且准确的解决这个问题

    2,计算

    设 G =< V,E > 为线图(简单图),V = {v1,v2,··· ,vn},A = (aij)nxn 为 G 的邻接矩阵,

    Am = (a(m) ij )nxn。则:

      a(m) ij 为从结点 vi 到结点 vj 长度为 m 的通路数目;  

      a(m) ii 为结点 vi 到自身的长度为 m 的回路数目;

      n ∑ i=1 n ∑ j=1 a(m) ij 是 G 中长度为 m 的通路(含回路)总数.   (所有元素的 和)

      n ∑ i=1 a(m) ii 是 G 中长度为 m 的回路总数.    (对角线上元素的 和)

    其中,A(m),a(m) 代表 矩阵的 m 次幂

    3,证明

    对 m 用数学归纳法。

    1 当 m = 1 时,显然成立。

    2 设 m = k 时,定理成立。

    3 证明 m = k+ 1 时定理成立。因为 (a(k+1) ij )n×n = Ak + 1 =  A × Ak = (n ∑ p= 1 (aip ) ( a(k) pj ) )n×n,

    故 a(k+1) ij = n ∑ p= 1 (aip ) ( a(k) pj ),而 aip 是结点 vi 到 vp 长度为 1 的通路数目,

    a(k) pj 是结点 vp 到 vj 长度为 k 的通路数目,故 (aip ) ( a(k) pj )是从结点 vi 经过 vp 到结点 vj 的长度为 k+1 的通路数目,

    那么 n ∑ p=1 (aip ) ( a(k) pj ) 是从结点 vi 到结点 vj 的长度为 k+ 1 的通路数目。 ( 其中,a(k) 代表 矩阵的 k 次幂 )

    4, 推论

    设矩阵 B(m) = (bij)n×n = A(1)+A(2) +···+A(m) (m⩾ 1),

    则 bij 表示结点 vi 到 vj 长度不大于 m 的通路数目,

    而 n ∑ i=1 n ∑ j=1( bij ) 则可表示图中长度不大于 m 的通路总数,

    n ∑ i=1 ( bii ) 则可表示 图中所有长度不大于 m 的回路总数。

    五, 可达性的判定

    1,考虑: 如何判断图中两结点间是否可达?

    判断图中两结点 vi 到 vj 是否可达的关键是判断是否存在通路,

    因而只要求邻接矩阵 A 及其正整数次幂 A,A2,A3,···,一旦发现这些矩阵中 i 行 j 列元素为非 0,则表示存在通 路。

    2,定理

    在一个具有 n 个结点的图中,如果从结点 vi 到结点 vj(vi ̸= vj) 存在一条通路,则从 vi 到 vj 存在一条长度不大于 n−1 的通路.

    在一个具有 n 个结点的图中,如果存在经过结点 vi 回路,则存在一条经过 vi 的长度不 大于 n 的回路。

    所以不需要算到 无穷次幂,只需算到 n-1 次幂

    所以:设 G =< V,E > 为线图,V = {v1,v2,··· ,vn},A = (aij)nxn 为 G 的邻接矩阵, Am = (a(m) ij )nxn,m = 1,2,··· ,n,

    Bn = (b(n) ij )nxn = A+A2 +A3 +···+An。

    则有当 vi ̸= vj 时,如果b(n) ij > 0,那么从 vi 到 vj可达,否则不可达。

    (注意:这里的 n 是结点数,不是边数)

    3, 可达性矩阵

    设 G =< V,E > 是一个线图,其中 V = {v1,v2,··· ,vn},并假定结点已经有了从 v1 到 vn 的次序,

    称 n 阶方阵 P = (pij) nxn 为图 G 的 可达性矩阵(accessibility matrix),其中 

    pij =  { 1   当vi到vj可达

         { 0   否则            , (i,j = 1,2,3,··· ,n)

    1 无向图的可达性矩阵是对称的,而有向图的可达性矩阵则不一定对称;

    2 由前面的讨论可知,通过计算 Bn 就可计算出 P 中各元素,即

    pij =  { 1   b(n) ij ̸= 0

          { 0     b(n) ij = 0 ,       (i,j = 1,2,3,··· ,n)

    设 G =< V,E > 为线图,A、P 分别是 G 的邻接矩阵和可达性矩阵,

    则有 P = A∨A(2) ∨A(3) ∨···∨A(n),  这里,A(i) 表示做矩阵布尔乘法的 i 次幂.

     这里应该是 将矩阵的乘法 变成 析取,即结果只能为 0 或 1.

    六,结点间的最短路径的计算

    设 G =< V,E > 为线图,V = {v1,v2,··· ,vn},A = (aij)nxn 为 G 的邻接矩阵,

    Am = (a(m) ij )nxn,m = 1,2,··· ,n,

    d(vi,vj) =  { ∞   如果所有a(m) ij 均为0

            { k   k = min{m|a(m) ij ̸= 0} ,(m = 1,2,3,··· ,n)。


    显然,这里也可以使用邻接矩阵的布尔积幂来判定。

    ======== ======= ======= ===== ==== ==== ==== === == =

    临安春雨初霁    陆游(宋)

    世味年来薄似纱,谁令骑马客京华。

    小楼一夜听春雨,深巷明朝卖杏花。

    矮纸斜行闲作草,晴窗细乳戏分茶。

    素衣莫起风尘叹,犹及清明可到家。

  • 相关阅读:
    Things You Should Know
    因为web.config配置,导致(当前不会命中断点,还没有为该文档加载任何符号)
    【HTML5 Canvas游戏开发】笔记(二) 显示一张图片
    【HTML5 Canvas游戏开发】笔记(一) 概述和基础讲解
    const char* pcr&char* const pcr
    【Python扩展阅读【转】EasyGui 学习文档【超详细中文版】】
    【Python扩展阅读【转】】字符串的方法及注释
    【Python⑥】python的缩进,条件判断和循环
    【Python⑤】python序列---list和tuple
    【Python④】python恼人的字符串,格式化输出
  • 原文地址:https://www.cnblogs.com/asdfknjhu/p/12993183.html
Copyright © 2011-2022 走看看