【问题标题】:How to merge nodes given an adjacency matrix如何在给定邻接矩阵的情况下合并节点
【发布时间】:2015-11-25 23:07:51
【问题描述】:

我有一个邻接矩阵,我似乎找不到一种快速的方法来组合多个节点来知道“超级节点”的最终数量是多少。我认为一个简单的解决方案是从本质上计算邻接矩阵的上三角部分的总和,然后减去节点的总数减去之前的总和就可以得到答案,但它看起来有点棘手。

假设:

我有 6 个节点,从 1 到 6: 节点 1、2、3 相互连接。 节点 4 和 6 相互连接, 节点 5 没有连接任何东西。

在这一点上,在 6 个初始节点中,我将只剩下 3 个超级节点,这似乎微不足道。现在使用我之前的方法的问题是假设第一个超级节点是这样连接的: 1到2 2到3, 但不是直接1到3。 (即使它们合并)。

这里 sum(upptriangle(Adj))=3 有效,但对于第一种情况,我添加了一个“虚拟节点”(连接 1-3)输出:sum(upptriangle(Adj))=4,并且这种类型连接数不应影响最终结果。

是否有我缺少的标准算法来解决这个问题(并补偿非完全连接的子图的过度完成?),而不是迭代地检查每个节点以查看它是否已合并?

换句话说,是否存在我只能从邻接矩阵中获得的节点合并的快速计算?

【问题讨论】:

  • 当您说“已连接”时,您的意思是“它们之间有边缘吗?”例如,目标是确定有多少不同的连接组件?
  • @templatetypedef 基本上是的。
  • 请看herehere

标签: algorithm matrix adjacency-matrix


【解决方案1】:

当您的问题不是动态的时,您可以使用BFSDFS 来查找组件。 Using BFS or DFS to determine the connectivity in a non connected graph?

但如果您的问题是动态的,您应该使用 union find 数据结构。
Union-find data structure

【讨论】:

  • 我发现另一个似乎可行的选项是在 MATLAB 中创建具有稀疏数据结构的图 G,然后使用 graphconncomp(G) 来查找独立连通分量的数量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多