- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在实现 Karger 算法。据我了解,最后两个节点之间的边数并不总是 Min Cut。我无法理解的是我实际上如何从该算法中获得最小切割。我一直在寻找很多关于概率的东西,但对我来说它们看起来都是胡言乱语......
根据我所阅读的内容,我认为我需要在一张图上多次运行 Karger 算法。这将使我很有可能成功达到最低限度。我想?...
有人可以用更简单的方式解释一下吗?我如何找到运行此算法的次数?我上面说的对吗?
最佳答案
每次您运行 Karger 的算法时,它都会给您一个(半随机的)剪辑。该切割是最小切割的概率是 P = 1/(n^2/2 - n/2)
,这比完全随机选择一个切割要好得多。
如果你运行该算法一次,你得到最小割的概率是 P
,但你没有得到它的概率是 1 - P
。如果你运行该算法两次,那么你没有得到最小切割的机会是 (1 - P) * (1 - P)
,因为你必须第一次错过最小切割,并且第二次。
这样好多了。运行该算法两次使我们更有可能找到最小切割。
如果我们运行算法 T
次,那么没有得到 min cut 的概率是 (1 - P)^T
,这意味着得到的概率最小切割是 1 - (1 - P)^T
。
在这一点上,您问自己您多么想要正确的解决方案。弥补一些概率(1,000,000 分之一?),并求解 T。这就是您应该运行该算法的次数。
设置 T = C * (n choose 2) * ln(n)
很常见,因为这给你的小于 (1/n)^C
找不到最小切割的机会,这是一个更容易推理的公式,尤其是当您将 C
设置为 1 时。这样,与随机切割相比,您获得错误切割的可能性更低选择图形的单个节点。如果您的图表很大,那就太好了。
总而言之,根据获得正确答案的必要性来选择C
。如果您不知道它有多么必要,那么 C = 1
是一个很好的猜测,只需运行您的算法 (n choose 2) * ln(n)
次.
(大部分数学运算取自 the wikipedia page。您可以在那里找到更多详细信息)
关于algorithm - 随机最小割,Karger 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23556025/
我在任何命令式语言中实现这个算法都没有问题,但我在 Clojure 或任何其他函数式语言中很难实现它。许多算法都是根据使用可变数据结构和命令式循环来描述的,我很难将所有这些都转换为功能域。 这是我使用
Assume that we are given an undirected, unweighted graph G= (V, E) and some cost function c:E→R>0 as
我正在实现 Karger 算法。据我了解,最后两个节点之间的边数并不总是 Min Cut。我无法理解的是我实际上如何从该算法中获得最小切割。我一直在寻找很多关于概率的东西,但对我来说它们看起来都是胡言
我尝试实现 karger Minimum Cut 算法 ( Karger wiki page ) 到目前为止,我已经在小示例(大小为 10 的输入)上尝试了我的算法,它似乎有效。但是当我尝试输入更大的
from random import randint from collections import defaultdict ###################### def getGrap
我已经使用路径压缩启发式算法和按等级联合的联合查找数据结构实现了 Karger 算法,但我遇到了几个问题 我基本上所做的是,我运行算法 NNlog(N) 次以获得对答案的良好估计。但是,我只是没有得到
我在Python中实现Karger Min Cut算法时遇到了僵局。我伤透了脑筋,但仍然不明白为什么我的实现不起作用,而它用铅笔和纸工作得很好...... 考虑一个具有四个节点 1、2、3、4 和五个
一段时间以来,我一直在努力解决这个问题。实际上已经好几个星期了,但我已经用尽了可能的解决方案或修改。所以该算法是随机 Karger 最小切割算法,下面提供了我的实现: 算法: 用于无向图。每个顶点都作
我是一名优秀的程序员,十分优秀!