Algorithm 如果边数已知,则创建最小生成树的时间复杂度

Algorithm 如果边数已知,则创建最小生成树的时间复杂度,algorithm,big-o,time-complexity,graph-algorithm,minimum-spanning-tree,Algorithm,Big O,Time Complexity,Graph Algorithm,Minimum Spanning Tree,假设连通图的边数已知,且每条边的权重不同,那么是否有可能在线性时间内创建最小生成树 要做到这一点,我们必须审视每一个边缘;在这个循环中,不能包含任何搜索,否则它将导致至少n个logn次。我不知道如何在不搜索循环的情况下执行此操作。这意味着,不知何故,我们必须只看一次每一条边,并根据一些不涉及不断增长的数据结构的“静态”先前值来决定是否包含它 所以。。假设我们保留该节点的端点,然后查看下一个节点,如果下一个节点的顶点与prev相同,则比较prev和当前节点的权重,并保留较低的一个。如果当前节点的端

假设连通图的边数已知,且每条边的权重不同,那么是否有可能在线性时间内创建最小生成树

要做到这一点,我们必须审视每一个边缘;在这个循环中,不能包含任何搜索,否则它将导致至少n个logn次。我不知道如何在不搜索循环的情况下执行此操作。这意味着,不知何故,我们必须只看一次每一条边,并根据一些不涉及不断增长的数据结构的“静态”先前值来决定是否包含它

所以。。假设我们保留该节点的端点,然后查看下一个节点,如果下一个节点的顶点与prev相同,则比较prev和当前节点的权重,并保留较低的一个。如果当前节点的端点不等于prev,则它位于不同的组件中。。现在我被卡住了,因为我们无法创建哈希或数组来跟踪已经添加的组件节点,同时在线性时间内查看每条边

我想到的另一种方法是找到重量最小的边;由于边权重不同,因此此边将是任何MST的一部分。然后。。我被卡住了。因为我们不能在线性时间内对n-1条边这样做

有什么提示吗


编辑

如果我们知道节点的数量、边的数量以及每个边的权重是不同的,会怎么样?比如说,有n个节点,n+6条边


那么我们只需要找到并删除正确的7条边,对吗?

据我所知,如果知道图中有多少条边并且它们是不同的,就无法更快地计算MST。在最坏的情况下,您必须查看图中的每条边,然后才能找到最小成本边(必须在MST中),在最坏的情况下,这需要Ω(m)时间。因此,我认为任何MST算法在最坏的情况下都必须花费Ω(m)时间

但是,如果我们已经在最坏的情况下进行Ω(m)工作,我们可以对任何MST算法执行以下预处理步骤:

  • 扫描边缘,数一数有多少
  • 向每个边权重添加ε值,以确保边是唯一的
  • 这也可以在时间Ω(m)内完成。因此,如果有一种方法可以在知道边缘数量和边缘代价不同的情况下加速MST计算,那么我们只需在任何当前MST算法上执行此预处理步骤,以获得更快的性能。因为据我所知,没有任何MST算法出于性能原因尝试这样做,所以我怀疑没有一种(已知的)方法可以基于这些额外的知识获得更快的MST算法


    希望这有帮助

    已知多条边(N)的事实不会以任何方式影响复杂性。N仍然是一个有限但无界的变量,每个图都有不同的N。如果在N上放置一个上界,比如说一百万,那么复杂度是O(一百万对数一百万)=O(1)


    每个边都有不同的权重这一事实也不会影响程序,因为它不会说明任何关于图形结构的信息。因此,关于当前情况的知识不会影响进一步的处理,因为我们无法预测下一步图的结构会是什么样子。

    有一个著名的最小生成树随机线性时间算法,其复杂性在边数上是线性的。参见Karger、Klein和Tarjan的“寻找最小生成树的随机线性时间算法”

    本文的关键结果是他们的“抽样引理”——如果你独立地随机选择概率为p的边的子集,并找到这个子图的最小生成树,那么在连接其两端的树路径中,只有| V |/p边比最差边更好


    正如templatetypedef所指出的,你无法超越线性时间。所有边权重都不同是简化分析的常见假设;如果有什么不同的话,它会使MST算法运行得稍微慢一点

    如果边的数量接近n,如本例中的
    n-6
    (编辑后),我们知道我们只需要删除7条边,因为每个生成树只有
    n-1
    边。 结果表明,循环中最昂贵的边不属于任何最小生成树(假设所有边都是不同的),因此应该删除


    现在,您可以简单地应用BFS或DFS来识别一个周期并删除最昂贵的边缘。所以,总的来说,我们需要运行BFS 7次。这需要
    7*n
    时间,并使我们的时间复杂度为
    O(n)
    。同样,只有当边的数量接近节点的数量时,这才是正确的。

    您的分析是正确的,但我们也有一个匹配的线性理论上限。我对你的评论感到有点困惑,你说“并没有任何MST算法会因为性能的原因而尝试这样做”,但是---你真的知道一个应用程序,在这个应用程序中,MST是计算出来的,并且人们非常关心MST代码的性能工程吗?