如何搜索所有元素在两个细胞数组?

1视图(30天)
Asaf McRock
Asaf McRock 2021年3月5日
评论道: Asaf McRock2021年10月11日
你好,
我有两个细胞阵列,每一个细胞都在这两个数组表示图中的连接组件。
C ={[21日45、87、99121],[37918],[150700],[218851],[420728],[464761],[695709],16日,34个};%连接组件图G
B = {(4600303、5、56、88、87、63], [142257481785], [103、33509], [99588], [251524], [572683], 8, 65105}%连接组件图H
我想去通过每个单元阵列C和检查如果是成员(节点)连接到B细胞的其他成员(节点)。
也就是说,如果节点[37918]在C(在同一个组件)连接到251年和588年两个节点B(不同的组件)删除37918之间的边缘。
我会感谢你的帮助和建议。
4评论
克里斯汀Tobler
克里斯汀Tobler 2021年3月9日
它看起来像B和C代表只有一个子集的连接组件图中(并不是所有的数字从1到918出现在这里,所以其他节点必须在不同的组件。正确吗?
所以每个节点在B连接到一个节点在C ?如果不是,这是否意味着对节点[918]在C语言中,你想去通过每一对节点x, y在B x连接到37 C和y连接到588 B,并去除之间的边缘[918]除非每一对节点B (x, y)连接的优势?
对性能,首先我建议尝试使用默认的输出从conncomp,这是一个向量垃圾箱,垃圾箱(I)让我在节点的组件。它快得多检查两个节点是否在同一个组件使用垃圾箱(i) = =垃圾箱(j)比使用单元阵列的输出。

登录置评。

接受的答案

克里斯汀Tobler
克里斯汀Tobler 2021年3月9日
好了,假设你有一个图形包含G和H作为图形对象存储GH,这图包含了黑色和红色边缘从你的照片,但不是紫色的,只是G和H之间的映射。
我还假设您有一个向量mapGH这两个点之间的映射(紫色的线):mapGH j和mapGH (I) = = = =我(j),我是一个节点在G和j对应的节点在H。
我认为这些输入可用吗?
然后,我们可以找到所有边缘去除如下:
垃圾箱= conncomp (GH);
(s, t) = findedge (GH);%列表所有边缘的GH开始和结束节点
圣= (s, t);
%我们知道垃圾箱(s) = =垃圾箱(t),因为两个节点连接的边缘总是在相同的组件。
%检查他们的映射边缘也在同一个组件:
needRemoveEdge =垃圾箱(mapGH (s)) ~ =垃圾箱(mapGH (t));
GH = rmedge (GH,找到(needRemoveEdge));
这个删除所有边的映射节点并不在同一组件的其他图。但是删除这些边缘将改变连接组件,这可能是一个好主意(阶段),几次,直到没有边缘必须删除:
垃圾箱= conncomp (GH);
(s, t) = findedge (GH);%列表所有边缘的GH开始和结束节点
圣= (s, t);
%我们知道垃圾箱(s) = =垃圾箱(t),因为两个节点连接的边缘总是在相同的组件。
%检查他们的映射边缘也在同一个组件:
needRemoveEdge =垃圾箱(mapGH (s)) ~ =垃圾箱(mapGH (t));
任何(needRemoveEdge)
GH = rmedge (GH,找到(needRemoveEdge));
垃圾箱= conncomp (GH);
(s, t) = findedge (GH);%列表所有边缘的GH开始和结束节点
圣= (s, t);
%我们知道垃圾箱(s) = =垃圾箱(t),因为两个节点连接的边缘总是在相同的组件。
%检查他们的映射边缘也在同一个组件:
needRemoveEdge =垃圾箱(mapGH (s)) ~ =垃圾箱(mapGH (t));
结束
这永远是一个无限循环,因为每次迭代从GH删除至少一个边缘。
记住我还没有测试这个,因为我没有时间写例子现在输入。你可以试一试,让我知道它的工作原理?如果没有,你可以包括一些示例数据GH和mapGH吗?
3评论
Asaf McRock
Asaf McRock 2021年10月11日
嗨Tobler博士,
我知道这个问题已经回答你几个月前,但我有一个问题请,我会感激你的帮助。它将有一个大数量的阶段如果我的两个图有更多的节点,说10000个节点?我只有7个阶段当我测试这个代码大量的节点。我担心我应该获得更大的不像50 - 100阶段。的节点。
谢谢

登录置评。

更多的答案(0)

标签

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!