在matlab中连接二分图的组件

时间:2013-11-18 19:17:01

标签: matlab graph bipartite

我有两种类型的数据,X和Y.X中的每个x都与一定数量的Y相关联,并且Y中的每个y可能与某些数量的X相关联,也可能没有。

Xs不与其他Xs关联,Ys不与其他Ys关联。情况如下:

connected components

左边是Xs,右边是Ys。

当我只有一种类型的数据时,我知道如何找到图形的连通分量:创建N-by-N矩阵并在其上调用graphconncomp。当我有两种类型的数据时,如何找到所有连接的组件?

1 个答案:

答案 0 :(得分:3)

如何将图的亲和度矩阵构造为稀疏矩阵

G = sparse( length(X)+length(Y), length(X)+length(Y) );

这会创建一个大小为|X|+|Y|的“全零”稀疏矩阵 - 按 - |X|+|Y|
如果您输入

>> whos G

你会看到,尽管G大约有50K ^ 2,但几乎没有记忆。

现在你所要做的就是使用你的函数在XY的相应节点之间设置1,然后你就能在{{1}上运行graphconncomp }}


二分案

要构建二分图的邻接矩阵,您可以(最初)使用大小为G的更小(仍然稀疏)矩阵B - { - 1}}。设|X||Y|,然后

x=length(X)

如果节点y=length(Y)已连接到节点 B = sparse( x, y ); % if you have an estimate of the number of edges, you can preallocate here ,则条目B( ix, jy )设置为1
完成构建X(ix)后,您可以使用它来简单地通过

形成Y(jy)
B

请注意,我不使用G创建全零的矩阵,而是 G = [ sparse( x, x ), B; B.', sparse(y, y)]; ,因此构造将具有内存效率。

现在,您可以在zeros上运行sparse