浅析图的邻接矩阵进行平方运算的含义

来源:互联网 发布:arm linux交叉编译 编辑:程序博客网 时间:2024/04/29 05:09

某一天,我在一本书上看到了一个问题,大意是实现矩阵的平方运算,并分析平方运算后邻接矩阵中元素值的含义,想了好久没弄明白。今天上课闲来无数,在纸上把这个问题模拟了一下,没想到却发现了其中的巧妙。

首先我们来构造一个图如下:












                                              图1.1

                  0  1  0  1                       2  1  2  1

矩阵 A =   1  0  1  1   矩阵A^2 =  1  3  1  2

                  0  1  0  1                       2  1  2  1

                  1  1  1  0                       1  2  1  3


现在我们来进行矩阵乘法,这是A^2的第一行

a[1][1] = a[1][1]*a[1][1] + a[1][2]*a[2][1] + a[1][3]*a[3][1] + a[1][4]*a[4][1] = 2

a[1][2] = a[1][1]*a[1][2] + a[1][2]*a[2][2] + a[1][3]*a[3][2] + a[1][4]*a[4][2] = 1

a[1][3] = a[1][1]*a[1][3] + a[1][2]*a[2][3] + a[1][3]*a[3][3] + a[1][4]*a[4][3] = 2

a[1][4] = a[1][1]*a[1][4] + a[1][2]*a[2][4] + a[1][3]*a[3][4] + a[1][4]*a[4][4] =1

我们来分析第一个式子,

a[1][1] = 0,所以a[1][1]*a[1][1] = 0;

a[1][2] = 1,a[2][1] = 1,所以a[1][2]*a[2][1] = 1;

a[1][3] = 0,所以a[1][3]*a[3][1] = 0;

a[1][4] = 1,a[4][1] = 1,所以a[1][4]*a[4][1] = 1;

整个式子相加为2,不知道大家看到这里有没有发现什么- -。

因为矩阵乘法的原因,两个相乘时,第一个的纵坐标等于第二个的横坐标,例如a[1][2]*a[2][1]就相当于从1“走”到2,再从2“走”到1,而且只有当两者都为1,即存在这两条的时候这个乘积才会为1,那么就表示从1出发到达2的路径+1。

其实矩阵A的含义可以这样解释,a[i][j]表示的是,从点i出发走一步到点j有多少条路径,不用多说要么为1,要么为0。而乘上一个矩阵A就相当于步数+1。现在我们来分析A^2这个矩阵的含义,a[i][i]表示的是,从点i出发走2步到达点j有多少条路径。那么是否可以表示为A^3,A^4,...,A^n这样的形式呢。

我们看一下A^3中的两次次运算

a^3[1][1] = a^2[1][1]*a[1][1] + a^2[1][2]*a[2][1] + a^2[1][3]*a[3][1] + a^2[1][4]*a[4][1] = 2*0 + 1*1 + 2*0 +1*1 = 2

a^3[1][2] = a^2[1][1]*a[1][2] + a^2[1][2]*a[2][2] + a^2[1][3]*a[3][2] + a^2[1][4]*a[4][2] = 2*1 + 1*0 + 2*1 + 1*1 = 5

这个其实就是在走两步的基础上再走一步。


最后,总结下A^n中,A[i][j]表示的是从i出发走到点j走n步,有多少种走法。

如若有错误,还请指出。。。



详细参考资料http://pan.baidu.com/s/1hqxPIlu


2 0