【问题标题】:Finding Minimum spanning tree with an adjacency matrix with more than 1 connected component寻找具有超过 1 个连通分量的邻接矩阵的最小生成树
【发布时间】:2011-05-04 15:04:16
【问题描述】:

我为我的一个项目构建了一个邻接矩阵,并且我需要能够从该矩阵中构造一个最小生成树。通过阅读,Prim 的算法似乎最适合这种情况,但是我们不能假设该图是一个大的连接组件,因为我知道我们必须处理的至少一个图有大约几千个连接的组件。 Prim 的算法在这里仍然可行吗?如果可行,我还需要做些什么吗?

我这里是用Java写的,可以很好的构造邻接矩阵,只是卡在了这部分。

【问题讨论】:

    标签: java minimum-spanning-tree adjacency-matrix


    【解决方案1】:

    所以你的意思是有可能没有生成树?在这种情况下 prims 很好,您只需要添加一个检查以确保所选列中存在可能的路径。在没有生成树的情况下,尝试用它做任何事情会很复杂,你必须删除你添加到树中的所有顶点,并将剩余部分视为新图。

    编辑:如果您在矩阵上手动执行 prims(google 'D1 prims matrix'),那么很容易想象我所说的所选列中没有弧的意思。

    【讨论】:

    • 好吧,我的教授说的是,如果没有一棵生成树,那么我们必须为每个连接的组件计算所有生成树的总和。这是否意味着我必须遍历每个连接的组件...
    • @Chris Song,不,你会在 prims 中找到你知道没有网络的阶段,然后你可以从另一个不在集合中的节点开始并简单地添加它。它的效果与您从集合中的节点到外部节点绘制虚拟弧线的效果完全相同。正如我所说,拿一些纸试试看。
    【解决方案2】:

    除非图是连通的,否则没有最小生成树之类的东西。

    因此,您可能想做以下两件事之一:要么构建所有连接组件的最小生成森林;要么或者通过添加边来连接组件来为整个图形构建 MST。取决于您的问题领域。

    或者,也许您只是应该检测到图形未连接并指出它不可能?这很容易做到。

    【讨论】:

    • 这两种情况都可以构建到 prim 的算法中,而不是在开始时作为单独的检查。当然,第一种情况很大程度上取决于它是否可行的目标。
    • 根据我的教授的说法,他说对于没有最小生成树的情况,我们应该为所有连接的组件做最小生成树。我们只是找到所有边的权重之和,这样在技术上应该可以工作。
    猜你喜欢
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多