我有一个邻接矩阵,我似乎无法找到一种快速的方法来组合多个节点,以了解最终数量的超级节点"是。我认为一个简单的解决方案是基本上计算邻接矩阵的上三角部分的总和,减去节点总数减去前一个总和会给我答案,但它看起来有点棘手。
假设:
我从1到6有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,这种类型的连接不应影响最终结果。
是否存在我缺少的标准算法,以解决此问题(并补偿未完全连接的子图的过度完成?),而不是迭代地遍历每个节点以查看它是否已合并?
换句话说,我是否只能从邻接矩阵中快速计算节点合并?
答案 0 :(得分:1)
当您的问题不是动态问题时,您可以使用BFS
或DFS
来查找组件。
Using BFS or DFS to determine the connectivity in a non connected graph?
但如果您的问题是动态的,则应使用union find数据结构 Union-find data structure