1

我有一个用于大型网络结构的来自节点的 nx2 矩阵。我用它来创建一个稀疏邻接矩阵,我可以使用 BIOGRAPH 绘制它。我的系统大小不一,最大的有 3000 多个节点(显然不适合绘图)。

如果我选择一条线,我希望能够为给定的 X(通常为 3)创建一个列表,其中包含从原始线(两个节点)开始的 X 个“步骤”内的所有线和节点。使用蛮力显然不是太难。但是,我需要尽快完成此操作。

  adj_mat = sparse(from_nodes, to_nodes, 1, s, s); 

有没有办法使用邻接矩阵来做到这一点?我可以使用 to/from 列表更有效地做到这一点吗?

我现在要做的是查找连接到所选线的节点的索引,然后搜索整个 to-from 节点列表并查找 to/from 元素等于所选线的节点之一的所有线. 然后我使用新的节点列表并搜索整个 to/from 列表,再次搜索这些节点。

我现在使用的代码如下所示:

  % tempBranch = the branches connected to the list of the current branches
  k = 1;
  for i = 1:nnz(nodeList)   % number of after step X-1 (for X=0 this is 
                            % equal to the nodes connected to the chosen line
      for j = 1:n           % n = number of lines
          if branchList(j,1) == nodeList(i) || branchList(j,2) == nodeList(i)
              tempBranch(k) = j;
              k = k + 1;
          end
      end
  end

谢谢!

4

1 回答 1

0

一个好的起点是找到k距离两个给定节点i和小于边缘的所有节点j。使用您构建的邻接矩阵非常容易。

  1. 在矩阵的对角线上加 1 A
  2. 建立一个v所有的向量0,除了组件ij你放置的地方1
  3. 现在,计算A^k*v. 条目非零的所有节点都在k两个起点的边内(注意条目的值是 k 路径的数量!)。find您可以使用该函数自动提取这些索引。

这应该是相当有效的!

从节点中,我认为应该很容易找到您正在寻找的边缘。

希望能帮助到你!

于 2013-05-02T11:04:25.050 回答