- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
We have already seen that spanning trees and cuts are intimately related. Here is another connection. Let’s remove the last edge that Kruskal’s algorithm adds to the spanning tree; this breaks the tree into two components, thus defining a cut (S,S) in the graph. What can we say about this cut? Suppose the graph we were working with was unweighted, and that its edges were ordered uniformly at random for Kruskal’s algorithm to process them. Here is a remarkable fact: with probability at least 1/n^2, (S,S) is the minimum cut in the graph, where the size of a cut (S, S) is the number of edges crossing between S and S. This means that repeating the process O(n^2) times and outputting the smallest cut found yields the minimum cut in G with high probability: an O(mn^2 log n) algorithm for unweighted minimum cuts. Some further tuning gives the O(n^2 log n) minimum cut algorithm, invented by David Karger, which is the fastest known algorithm for this important problem.
这难道不是因为有 n^2 种独特的方法可以通过 Kruskal 算法处理图形吗?我的意思是,如果 Kruskal 算法只有 3 种独特的方式来处理具有 10 个节点的图,那么重复该过程 n^2 次将不会产生 n^2 个独特的“最后一条边”。如果独特的最终切割少于 n^2 个(即少于 n^2 个独特的“最后边缘”),它会如何工作?
如果边总数少于 n^2 怎么办?例如,您可能有一个只有 9 条边的 10 个节点的连接图,这意味着无论您重复该算法多少次,您都不会有 n^2 个唯一的“最后一条边”。在这种情况下它会如何工作?
循环遍历每条边并检查该边是否是最小切割不是更容易吗?在n个节点的图中,唯一边的最大数量为n + n-1 + n-2 ... + 1条边,小于n^2。考虑到 n^2 小于 n^2 log n,为什么不遍历所有边因为这样更快?
最佳答案
我认为您可能误解了算法的工作原理。该算法的工作原理是运行 Kruskal 算法,直到添加最后一条边,然后在此之前停止。该算法不会尝试建立这些“最后边缘”的集合;相反,重复运行 Kruskal 算法的 O(n2) 次随机迭代,以建立 O(n2) 可能的削减。在所有这些候选切割中取最低切割然后以高概率给出最小切割。换句话说,边数是否少于 O(n2) 并不重要。重要的是最后保留的切割,而不是考虑的最后一个边缘。
希望这对您有所帮助!
关于algorithm - 使用 Kruskal 算法找到图中的最小割点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11368635/
我正在尝试用 Python (scipy) 替换 Python 脚本中的一些 rpy2 代码。在这种情况下,我需要用 (Python: kruskal.test() ) 替换 Kruskal-Wall
一 构建后的图 二 代码 package graph.kruskal; import java.util.ArrayList; import java.util.Collections; impor
一 点睛 构造最小生成树还有一种算法,即 Kruskal 算法:设图 G=(V,E)是无向连通带权图,V={1,2,...n};设最小生成树 T=(V,TE),该树的初始状态只有 n 个节点而无边的非
来这里之前我已经努力尝试并做了我的研究。下面的代码崩溃了,我怀疑滥用了 cout。 (这不应该是最好的实现,但暂时不是 pb) 有经验的人能看出问题出在哪里吗? 提前致谢 #include #inc
据说Kruskal构造MST的算法是贪心的,但是该算法选择的是全局最小值而不是局部最小值,这与Prim的算法不同。谁能解释一下 Kruskal 算法为何被视为贪婪算法? 最佳答案 我们在克鲁斯卡尔做什
假设G是一个有n个顶点的无向图,每对顶点之间有加权边。你能按以下结构构造一棵树吗: v_1-v_2-v_3-...-v_n 使得树中的每个节点对应于 G 中的一个顶点,并且每个节点除叶子外只有一个子节
我正在学习 Kruskal 的算法,我遇到了几个不同的实现,并且想知道它们之间的权衡是什么。两种实现方式如下: 实现一- 将图中的所有边放入优先队列 PQ- 从 PQ 中移除最小边 e - 如果 e
我对什么是 Kruskal 算法有了基本的了解,这就是我的发现: 该算法基本上是通过合并多棵树来构造一棵最小生成树,它首先根据边的权重对边进行排序。该算法从一个空子图开始,扫描边列表,如果不创建循环,
我正在研究来自 this geeksforgeeks article 的 Kruskal 的 MST .给出的步骤是: 按权重的非降序对所有边进行排序。 选择最小的边。检查它是否与目前形成的生成树形成
我有一个任务,我需要从单元格网格创建一个迷宫。 我使用 Randomized Kruskal's algorithm 成功地做到了如 Wiki 页面所述并使用 Disjoint-set data st
我找到了一个创建 makes 和 finds 方法的教程 public void makeSet(long data) { Node node = new Node();
我发现最小生成树 (MST) 的某些边使用联合查找方法重叠,详见 here ,经过修改 - 使用 float 而不是 integer 权重,使用 integer 值而不是 string ID。下图中的
我打算用 C++ 实现 Kriskal 的算法,但是... Unhandled exception at 0x0127160d in DAA.exe: 0xC0000005: Access viola
我正在计算这样的 kruskal 算法的时间复杂度(请参阅附件中的算法) T(n) = O(1) + O(V) + O(E log E) + O(V log V) = O(E log E)
我正在尝试尽可能高效地实现 Kruskal。 对于运行时效率,使用堆或排序算法对边进行排序有区别吗? 还有哪些其他技术可以使 Kruskal 算法更有效地工作? 最佳答案 这取决于您要解决的确切问题。
我如何使用 Kruskal 算法计算 im R(3.0.0 - Linux x32) 最小生成树? 我使用 igraph (0.6.5) 库创建一个加权全图,如下所示: set.seed(123456
当图有多个连通分量时,我不确定如何实现 Kruskal 算法 根据我对 Kruskal 算法的理解,它反复将最小边添加到集合中。然后,当检查完所有边时,它返回最多的边集。 但是,如果我的图表断开连接怎
虽然我在工作an assignment在 Stanford CS106B C++ 类(class)上,但我大量坚持实现 Kruskal 算法以找到最小生成树。 更具体地说,我无法弄清楚确定是否向树添加
由于 Kruskal 算法是贪心算法,这意味着我们有时可能得不到真正的最小路径。 但是谁能举出一个例子来说明这个算法没有得到最小值? 我不是在寻找复杂性,只是需要一个确实没有得到最佳解决方案的案例。
Here is a Graph我需要使用 Prim 的 和 Kruskal 的 算法找到 G 的最小生成树。 我使用 Prim 算法找到了最小生成树。 Here is my attempt . 我在使
我是一名优秀的程序员,十分优秀!