我有两种类型的数据,X和Y.X中的每个x都与一定数量的Y相关联,并且Y中的每个y可能与某些数量的X相关联,也可能没有。
Xs不与其他Xs关联,Ys不与其他Ys关联。情况如下:
左边是Xs,右边是Ys。
当我只有一种类型的数据时,我知道如何找到图形的连通分量:创建N-by-N矩阵并在其上调用graphconncomp
。当我有两种类型的数据时,如何找到所有连接的组件?
答案 0 :(得分:3)
如何将图的亲和度矩阵构造为稀疏矩阵:
G = sparse( length(X)+length(Y), length(X)+length(Y) );
这会创建一个大小为|X|+|Y|
的“全零”稀疏矩阵 - 按 - |X|+|Y|
。
如果您输入
>> whos G
你会看到,尽管G
大约有50K ^ 2,但几乎没有记忆。
现在你所要做的就是使用你的函数在X
和Y
的相应节点之间设置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
。