Algorithm Karger-Min-cut算法运行时间

Algorithm Karger-Min-cut算法运行时间,algorithm,graph,Algorithm,Graph,我想从Karger那里实现min-cut算法 Wikipedia声称可以编写运行时间为O(|V | ^2)的实现。我看不出有什么办法。该算法进行|V |迭代,并且在每次迭代中收缩一条边。要收缩边缘,您需要: 创建一个新的顶点 删除两个旧的顶点和 删除旧顶点之间的边 在O(|V|)中,没有可以添加顶点、删除顶点和删除边的图形数据结构。维基百科推荐一个邻接列表,但是它的运行时间是O(|V|+E|),如果你有|E|=|V| ^2,这是不好的。有没有可能实现Karger的最小切入点O(|V | ^2)?

我想从Karger那里实现min-cut算法

Wikipedia声称可以编写运行时间为O(|V | ^2)的实现。我看不出有什么办法。该算法进行|V |迭代,并且在每次迭代中收缩一条边。要收缩边缘,您需要:

  • 创建一个新的顶点
  • 删除两个旧的顶点和
  • 删除旧顶点之间的边
    O(|V|)中,没有可以添加顶点、删除顶点和删除边的图形数据结构。维基百科推荐一个邻接列表,但是它的运行时间是O(|V|+E|),如果你有|E|=|V| ^2,这是不好的。有没有可能实现Karger的最小切入点O(|V | ^2)

    维基百科遗漏了一个细节,即您需要一个带有加权边的邻接列表,以便通过添加其权重来合并平行边。这样,(未加权)阶数在每一步都以| V |为界。

    CS堆栈交换讨论的是使用邻接列表,它只是关于如何收缩,而不是它的速度有多快。边收缩需要O(V^2)时间,而不是整个算法。好的,但我们的教授说整个算法在O(| V |^2)内是可能的。这是真的吗?可能使用哈希表来存储图形。边是否加权有什么关系?问题是顶点删除始终是O(| E |),而| E |可以是| V | ^2或@Asker。您需要合并平行边。那么顶点删除就是O(|V |)。如何在O(|V | ^2)中合并平行边?我认为您需要检查每条边是否为平行边,但可能有超过| V | ^2条边。谢谢您的回复。@Asker Bucket排序。在每个步骤中,只需检查与收缩边的一个端点相关的边。