【问题标题】:Randomized Min-Cut, Karger's Algorithm随机 Min-Cut,Karger 算法
【发布时间】:2014-05-09 03:13:02
【问题描述】:

我正在实施 Karger 算法。据我了解,最后两个节点之间的边数并不总是最小切。我难以理解的是我如何真正从这个算法中得到最小切分。我一直在寻找很多关于概率的东西,但对我来说这一切都像是胡言乱语......

根据我的阅读,我认为我需要在图上多次运行 Karger 算法。这将使我很有可能成功击中最小切线。我想?...

有人可以用更简单的方式解释一下吗?如何找到运行此算法的次数?我上面说的对吗?

【问题讨论】:

    标签: algorithm graph minimum-cut kargers-algorithm


    【解决方案1】:

    每次运行 Karger 算法时,它都会给你一个(半随机的)剪辑。该切割是最小切割的概率为P = 1 / (n^2/2 - n/2),这比完全随机选择切割要好得多。

    如果你运行一次算法,你得到最小切割的概率是P,但你没有得到它的概率是1 - P。如果您运行该算法两次,那么您没有获得最小切割的机会是(1 - P) * (1 - P),因为您将不得不在第一次和第二次错过最小切割。

    这样好多了。运行算法两次使我们找到最小割的可能性更高。

    如果我们运行算法T次,那么没有得到最小割的概率是(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。您可以在那里找到更多详细信息)

    【讨论】:

    • 总结得很好。统计数据让我的大脑受伤,所以这很有帮助!谢谢!
    • Karger 算法的一次迭代找到最小割的概率 P 是 P >= 2/(n(n-1))2/(n(n-1)) 是最坏情况下的下限。该算法的性能通常比这要好得多。
    猜你喜欢
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 2016-11-02
    • 2012-04-20
    • 1970-01-01
    • 2014-07-15
    相关资源
    最近更新 更多