【问题标题】:randomized quicksort: probability of two elements comparison?随机快速排序:两个元素比较的概率?
【发布时间】:2010-05-01 16:42:10
【问题描述】:

我正在阅读 M.Mitzenmacher 和 E.Upfal 的“Probability and Computing”。我无法理解如何计算两个元素的比较概率。

输入: 排序的数字列表 (y1,y2,...,yN)。我们正在寻找枢轴元素(随机)。问题:两个元素 yi 和 yj (j>i) 被比较的概率是多少?

答案(来自书本): yi 和 yj 将被比较,如果 yi 或 yj 将被选为从序列的第一次抽签中的枢轴 (yi,yi+1,...,yj- 1,yj)。所以概率是:2/(j-i+1)。

对我来说问题是最初的主张:例如,从整个列表的第一次抽签中选择 yi 将导致与 yj 进行比较(反之亦然),概率为 2/n。

因此,“反向”声明是正确的——在 yi 或 yj 之前不能选择 (yi+1,...,yj-1) 元素,但“池”大小不固定 (在第一次绘制时它肯定是 N,但在第二次绘制时它更小)。

有人能解释一下作者是如何得出如此简单的结论的吗?

Edit1:一些好心人完善了我的帖子,谢谢 :-)。

Edit2:列表最初是排序的。

【问题讨论】:

    标签: algorithm probability quicksort


    【解决方案1】:

    快速排序通过将每个元素与枢轴进行比较来工作:大于枢轴的那些放在枢轴的右侧,而不大的放在左侧(或者相反,如果您想要降序排序,它不会'没关系)。

    在每一步,枢轴都是从序列(yi, yi+1, ..., yj) 中选择的。这个序列有多少个元素? j - i + 1(我想你打错字了,不可能是y - i + 1)。

    所以从这个列表中选择两个特定元素之一的概率显然是2 / (j - i + 1)。

    对我来说问题是初始声明:例如,从整个列表的第一次抽签中选择 yi 将导致与 yj 进行比较(反之亦然),概率为 2/n。

    选择yi 只会将其与其他j - i 元素进行比较。你从哪里得到n?请记住,您的列表仅从 yi 到 yj!

    编辑:

    再次阅读这个问题,我确实觉得它有点模棱两可。正如你所说,在递归的第一步比较两个元素的概率确实是2 / n,因为i 和j 是1 和n。 在未知的递归步骤比较两个元素的概率是我上面解释的。

    【讨论】:

    • 感谢您的评论,我更正了错字并在列表中添加了信息——它最初是排序的。无论如何,正如我所看到的(在您的编辑中),您还发现了列表大小的问题,但是最终的结论是不正确的。你询问元素 yi 和 yj,所以你甚至不能说在任何进一步的步骤中会有这样的序列 yi..yj(例如,如果你选择 yi+1 作为你的第一个枢轴,就不会有)。
    • 进一步的步骤并不重要。在每一步,选定的枢轴都会到达其最终位置,因此它将不会在任何进一步的步骤中发挥作用。
    • 假设 i>2。在第一步中,您在 2nd -- 2 中选择了 1。现在,在第 3 步中拾取 i 或 j 的概率是 2/(N-3+1),而不是 2/(j-i+1)(如你在编辑的最后一句话中写道)。更重要的是——这只是概率。拿起那些元素,而不是概率。比较它们,因为第三步的其他场景也会导致比较它们。每一步都决定了概率,所以它们很重要。
    • 我的意思是,如果您在当前递归步骤中选择正确的枢轴,那么进一步的步骤并不重要。我觉得这个问题要求在一个给定的递归步骤中选择正确的枢轴(yi 或yj)的概率,一个对应于序列yi, yi+1, ..., yj。否则,你是对的,这个问题要困难得多。这确实是一个模棱两可的问题。
    【解决方案2】:

    作者给出的答案是正确的,尽管我仍然不明白他们是如何轻松快速地得出结论的。

    用 L=j-i+1 表示。 j 和 i 的实际值在这里无关紧要,重要的是 L。我们也用 P(N,L) 表示从大小为 N 的有序数字序列中比较 yi 和 yj 元素的概率。

    事实:

    • P(N,2) = 1
    • P(N,L) = 2/N+1/N * ( P(N-1,L)+P(N-2,L)+P(N-3,L)+...+ P(L,L))

    这个和看起来很难看,但经过两次测试后,似乎 P(N,L) 可能等于 2/L。让我们来看看:

    • P(N,L=2) = 1 = 2/2 = 2/L
    • 假设 P(N,L) = 2/L
    • P(N+1,L) = 2/(N+1) + 1/(N+1) * ( P(N,L) + ... P(L,L) ) = 2/( N+1) + (N-L+1)*1/(N+1)*2/L = 2/L

    由于 L=j-i+1,我们得到 2/(j-i+1)。

    【讨论】:

      猜你喜欢
      • 2013-01-29
      • 2013-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-08
      • 2021-07-27
      • 2018-04-19
      • 2015-07-06
      相关资源
      最近更新 更多