涉及任意两个节点的三角形数

时间:2016-10-26 17:59:44

标签: algorithm numpy graph theano

我们说我有一个邻接矩阵 A ,代表一个未加权的无向图。

我想计算 B ,其中 B [ i ] [ j ]是数字包含节点 i j 的封闭三角形。

有没有办法只使用线性代数从 A 计算 B ?我想在theano中实现这一点。

1 个答案:

答案 0 :(得分:2)

假设jk彼此相邻。然后,包含两者的三角形的数量是连接到它们的其他顶点B_i,j = Sum_k (if A_i,k=1 and A_k,j=1 then 1 else 0) 的数量。即。

B_i,j = Sum_k A_i,k * A_k,j

这假设邻接矩阵的对角线为0.布尔表达式可以转换为单个产品,因为我们只使用0和1:

B = A^2

这看起来非常像矩阵乘法,实际上它是:

i

但是,我们仍然认为jB是相互关联的。为了将这个假设整合到最终公式中,我们只需要将i的每个分量乘以邻接矩阵的相应条目。这会将所有条目设置为零,而jB = (A^2) * A, 未连接。所以最终的公式是:

^2

其中*是自身的矩阵产品,userChoice = scnr.next().charAt(0); 是分量乘法。