随机快速排序:两个元素比较的概率?

时间:2010-05-01 16:42:11

标签: algorithm probability quicksort

我正在阅读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:列表最初排序。

2 个答案:

答案 0 :(得分:4)

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

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

因此,从该列表中选择两个特定元素之一的概率显然是2 / (j - i + 1)

  

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

挑选yi会使其仅与其他j - i元素进行比较。你从哪里得到n?请注意,您的列表仅从yiyj

修改

再次阅读这个问题,我发现它有点含糊不清。正如您所说,在递归的第一步比较两个元素的概率确实是2 / n,因为ij1n。在未知的递归步骤中比较两个元素的概率就是我在上面解释过的。

答案 1 :(得分: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)。