有向图的邻接矩阵_邻接矩阵与可图化

本文详细讲解了邻接矩阵的定义与应用,包括图中通路计数,以及可图化与可简单图化的概念及其判断方法。此外,介绍了如何通过Kruskal算法求解最小生成树,以及最优二叉树(Huffman树)的构建与应用实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

三、邻接矩阵及其应用是我们在图论部分遇到的第三个难点。

1.邻接矩阵的定义

654cad0b65c31f4824ba220b77ead685.png

邻接矩阵的初始矩阵中的每个元素是顶点 vi 邻接到顶点 vj 边的条数。切记这是vi到vj直接的边,不是通路。

2.邻接矩阵的应用

caf6c3dd9abd3ab37afe61c64f4d0f22.png

这个才是重点。

图中长度为L的通路的条数,可以由图的邻接矩阵的L次方求得。邻接矩阵的L次方,就是邻接矩阵的L-1次方乘以邻接矩阵。

将邻接矩阵的L次方中所有的元素相加,就是长度为L的通路条数;将其所有对角线的元素相加,就是长度为L的回路条数。

例  有向图D如图所示,求 A, A2, A3, A4,并回答诸问题:

(1) D 中长度为1, 2, 3, 4的通路各有多少条?其中回路分别为多少条?

(2) D 中长度小于或等于4的通路为多少条?其中有多少条回路?

943da77be50151152dab2a88697b683d.png

2a82faa291401741f49b6f26ca8419a9.png

(1) D中长度为1的通路为1+2+1+1+1+1+1=8条,其中有1条是回路.

    D中长度为2的通路为1+3+2+2+1+1+1=11条,其中有3条是回路.

  D中长度为3和4的通路分别为1+4+3+3+1+1+1=14和   1+5+4+4+1+1+1=17条,回路分别为1与3条.

(2) D中长度小于等于4的通路为50条,其中有8条是回路.

四、可图化与可简单图化是我们在图论部分遇到的第四个难点。

   1.相关定义

       V={v1, v2, …, vn}为无向图G的顶点集,称d(v1), d(v2), …, d(vn)为G的度数列  

 V={v1, v2, …, vn}为有向图D的顶点集,

 D的度数列:d(v1), d(v2), …, d(vn)

 D的出度列:d+(v1), d+(v2), …, d+(vn)

 D的入度列:d-(v1), d-(v2), …, d-(vn) 

7646e13f611d090c461d99a75e1f5c40.png

结点的度数,就是与结点相关联的边的条数。一条边提供两个度,普通边将两个度提供给不同的两个结点,自回路将两个度提供给同一个结点。

上图中v1,v2,v3,v4,v5的度分别是44,2,1,3。

我们将度数看成一个数字序列,则(4,4,2,1,3)称为度数列。问题是,是不是所有的数字序列可以作为结点的度数,进而画出图呢?

不是的。只有满足条件的数字序列才可以作为图中结点的度。

如果一个非负整数列d=(d1, d2, …, dn)可以画成图,则称其是可图化的;如果一个非负整数列d=(d1, d2, …, dn)可以画成简单图,则称其是可简单图化的。

2.可图化

如果一个数字序列可图化,根据握手定理,

3bda510e72a30368081b20a2c807653d.png

则所有结点的度数之和应该是2m,是偶数,所以,数字序列可图化的充要条件是:所有数字之和是偶数。

3.可简单图化

简单图是无自回路、无多重边的图。一个数字序列是否可简单图化,没有充分条件,只有必要条件:图的最大度<=n-1,n是图中结点的个数。

易知:

(1, 2, 3, 4, 5),(3, 3, 3, 4) 都不是可图化的,也不是可简单图化的。

(2, 4, 6, 8, 10),(1, 3, 3, 3, 4) 是可图化的,其中,(1, 1,1, 2, 3)的最大度是3,小于等于5-1=4,又是可简单图化的。

当图的最大度=n-1时,处于临界值,这时需要去具体分析一下,是不是可简单图化。

比如(1,3,3,3)满足可简单图化的必要条件。假设v2、v3、v4的度数均为3,v1是度数为1的结点,连接到v2。根据简单图的定义,没有自回路,没有多重边,则v2的另外两个度必然一个连接v3,一个连接v4。此时,v3的度也要为3,是不可能的,v3只能有一条连接到v4的边。否则就会有多重边出现。故(1,3,3,3)可图化,但不可简单图化。

五、最小生成树是我们在图论部分遇到的第五个难点。

生成树——生成子图并且是树。

生成这两个字,表示结点一个都不能少,边可以去掉一些;

树这个概念,用五个字来说,就是“连通无回路”;

那么,最小生成树的最小,体现在哪里呢?

最小,指的是树的最小。图中每条边都有权,一般用一个非负整数来表示,可以认为是两点间的距离、所耗费的时间等,权用英文单词weight来表示。

7693a04533c707c965b7a29d4a0d240c.png

上图中,v1和v2两个顶点之间有两条边,一条边的权为1,另一条边的权为2。我们可以理解为v1和v2两个顶点之间,通过第一条边需要用1个小时,通过第二条边需要用2个小时。当然,自回路也可以有权,比如图中v3顶点有自回路,自回路的权为1。

22419fae9ed0bce655922677131abf61.png             a89e50be93310bfdf250edf25ecd4943.png

对于一个图来说,它的生成树可能会有好多个。比如我们现在看到的这样的生成树,生成树中的每条边都叫树枝,所有的树枝的权之和,称之为树的权。比如说,目前这棵生成树的权是1+7+2+3+3+5+18=39,下面的这一棵生成树,它的权是2+8+3+4+18+3+4=42。这样的话,我们有的同学已经可以自己来定义最小生成树的概念了。所谓的最小生成树,就是在一个图的所有的生成树当中,找一棵权最小的生成树。

定义  T是G=的生成树

(1) W(T)——T各边权之和

(2) 最小生成树——G的所有生成树中权最小的树。

那么现在,如何去求一棵树的最小生成树呢?目前有两种成熟的算法。一种叫Kruskal(克鲁斯卡尔)算法,也叫避圈法;另一种叫Prim(普里姆)算法。现在我们来看一下避圈法。

避圈法求最小生成树

首先要将图中所有非环边按照权值从小到大排列,编号依次记为e1,e2,e3,……,em,当然在这个排序当中,我们允许有边的权值相同的情况出现。

第一步,取e1在最小生成树T当中。

第二步,检查e2,是否与e1构成回路。如果有回路出现,则舍弃e2;如果没有回路出现,则把e2也取在树T当中。

第三步,检查e3,看e3是否与e1 e2形成回路。如果有回路出现,则舍弃e3;如果没有回路出现,则把e3也取在树T当中。如此重复,直到得到最小生成树为止。

131210f1a687f9de98f06e1e6d4db7a5.png

下面对图G来求最小生成树。

首先,要剔除掉图中的自回路。

然后将其余的边按照权值从小到大排序。2,2,3,3,5,18。

第一步,取权为2的边在树T当中。接着检查另一条权为2的边,没有回路,加入生成树。再检查权为3的两条边,一条与权为2的边形成回路,舍弃;另一条权为3的边没有回路,加入树T。再检查权为5的两条边,有回路出现,舍弃。目前,剩下了最后一条权为18的边,权很大,要不要呢?当然要!因为如果没有这一条边,我们之前纳入进来的所有的边就不是连通的,也就不能称之为树了。这样,我们就得到了这个图的最小生成树,最小生成树的权W(T)=2+2+3+18=25.

六、最优二叉树是我们在图论部分遇到的第六个难点。

a833087ebd21272957baf602e5619fd6.png

求最优树的算法—— Huffman算法

给定实数w1, w2, …, wt,且w1<=w2<=…<=wt. 

(1)  连接权为w1, w2的两片树叶,得一个分支点,其权为w1+w2.

(2)  在w1+w2, w3, …, wt 中选出两个最小的权,连接它们对应的顶点(不一定是树叶),得新分支点及所带的权. 

(3)  重复(2),直到形成 t-1个分支点,t片树叶为止. 

8cdff1580c2eaad07bdeeff2da962093.png

一棵2叉树产生一个二元前缀码.

一棵正则2叉树产生惟一的前缀码(按左子树标0,右子树标1)

图所示二叉树产生的前缀码为

                     { 00, 10, 11, 011, 0100, 0101 }

9e08141ce4393e24872a6271bcc23ce0.png

例  在通信中,八进制数字出现的频率如下:

     0:25%          1:20%

     2:15%          3:10%

     4:10%          5:10%

     6:5%           7:5%

求传输它们的最佳前缀码,并求传输10的n次方(n>=2)个按上述比例出现的八进制数字需要多少个二进制数字?若用等长的(长为3)的码字传输需要多少个二进制数字?

解  用100个八进制数字中各数字出现的个数,即以100乘各频率为权,并将各权由小到大排列,得w1=5, w2=5, w3=10, w4=10, w5=10, w6=15, w7=20, w8=25. 用此权产生的最优树如图所示. 

9fb1fff60a73b3b93282457ac687f7d8.png

    01-----0           11-----1 

    001-----2         100-----3

    101-----4         0001-----5

    00000-----6     00001-----7

W(T)=285,即传100个以上述频率传输的数字需要285个二进制数,那么传10的n次方(n>=2)个用二进制数字需2.85*10的n次方个, 用等长码需3*10的n次方个数字. 

      注意:最小生成树和最优二叉树都不一定唯一,当其不唯一的时候,它们的权都是一致的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值