基于快速分区的概率

时间:2014-08-25 00:53:35

标签: algorithm probability quicksort

我遇到过这个问题:

令0 <α<.5为某个常数(与输入数组长度n无关)。回想一下QuickSort算法采用的Partition子程序,如讲座中所述。通过随机选择的枢轴元素,分区子程序产生的分裂是什么概率,其中两个子阵列中较小的子阵列的大小是原始阵列大小的α倍?

Its answer is 1-2*α.

有谁能解释我这个答案是怎么来的?请帮助。

7 个答案:

答案 0 :(得分:9)

枢轴元素的选择是随机的,具有均匀分布。

数组中有N个元素,我们假设N很大(或者我们不会得到我们想要的答案)。

如果0≤α≤1,则小于枢轴的元素数量小于αN的概率是α。元素数大于的数量小于αN的概率是相同的。如果α≤1/ 2,则这两种可能性是排他性的。

要说较小的子阵列长度≥αN,可以说这些条件都不成立,因此概率为1-2α。

答案 1 :(得分:3)

数组长度为n。 对于较小的阵列长度&gt; =αn,枢轴应大于αn个元素。同时,枢轴应小于αn个元素(否则较小的阵列大小将小于要求)

因此,在n个元素中,我们必须在(n-2α)n个元素中选择一个。

所需概率为n(1-2α)/ n。

因此1-2α

答案 2 :(得分:3)

解决问题的另一种方法(对于那些不耐烦地理解它的人,就像我一样)。

<强>首先 由于我们讨论的是“两个子阵列中较小的一个”,因此它的长度小于1/2 * n(n - 原始数组中的元素数)。

<强>第二 如果0 < a&lt; 0.5表示a * n也小于1/2 * n。 因此,我们从现在开始讨论两个随机选择的整数,最低点为0,最高点为1/2 * n。

<强>第三 让我们想象一下骰子的数字从1到6的两侧。让我们选择一个从1到6的数字,例如4.现在滚动骰子。每个数字的概率为1/6,是该滚动的结果。因此,对于事件“结果小于或等于4”,我们的概率等于每个结果的概率之和。并且我们有数字1,2,3和4.总共p(x <= 4)= 4 * 1/6 = 4/6 = 2/3。因此,事件“输出大于4”的概率是p(x> 4)= 1-p(x <= 4)= 1 - 2/3 = 1/3。

<强>四 让我们回到我们的问题。 “所选号码”现在是* n。我们将使用从0到(1/2 * n)的数字掷骰子得到k - 最小子阵列中的元素数量。结果以(a * n)最高为界的概率等于从0到(a * n)的所有结果的概率之和。并且任何特定结果k的概率是p(k)= 1 /(1/2 * n)。

因此p(k <= a * n)=(a * n)*(1 /(1/2 * n))= 2 * a。

由此我们可以很容易地得出结论p(k> a * n)= 1-p(k <= a * n)= 1 - 2 * a。

答案 3 :(得分:2)

概率是,所需元素的数量/元素的总数。 在这种情况下,((1-αn) - (αn))/ n 由于α介于0和0.5之间,(1-α)必须大于α。因此,它们之间包含的元素数量将是, (1-α-α)N =(1-2α)N 所以,概率是, (1-2α)N / N =1-2α

答案 4 :(得分:2)

其他答案没有完全点击我,所以这是另一个想法:

如果2个子阵列中至少有一个必须为formula,则可以推断出枢轴也必须位于formula位置。矛盾显而易见。如果数据透视为formula,则存在小于formula的子数组。根据相同的原因,枢轴也必须是formula。枢轴的任何较大值将产生比“右侧”formula更小的子阵列。

这意味着formula,如下图所示:

enter image description here

我们想要计算的是该事件的概率(称之为A),即formula

我们计算事件概率的方法是将成分结果的概率加总,即枢轴位于formula

该总和表示为:

enter image description here

这很容易简化为:

enter image description here

取消一些后,我们得到:

enter image description here

答案 5 :(得分:0)

考虑一个大小为100的数组,其中包含值从1到100的元素(未排序)。 可以将随机选择的数据透视表放置在1到100的任意位置,并且将其放置后会将数组分为两部分。 由于alpha大于0且小于50,因此拆分的较小尺寸不能为0,因此它应该为1或大于1直至49。 当枢轴放置在位置1到49(含)之间时,这将是拆分的第一部分,说A(从1到49),而剩下的第二部分B(从99到51)。 如果将枢轴放置在位置52到100(含)之间,则拆分A的第一部分(从51到99)到第二部分B(从49到1)。

让我们说枢轴已放置

在位置1处,拆分的左侧包含大小为1的A,右侧包含大小为99的B。
在位置2处,拆分的左侧包含2号大小的A,右侧包含98号大小的B。

...

在位置49处,该拆分在左侧包含大小为49的A,在右侧包含大小为51的B。

位置52,则拆分在左侧包含大小为51的A,在右侧包含大小为49的B。
在位置53处,拆分的左侧包含大小为52的A,右侧包含大小为48的B。

...

在位置100处,拆分的左侧包含大小为99的A,右侧包含大小为1的B。

在前49个拆分中,A保持小于B,在接下来的49个拆分中,B保持小于A。

通过说“两个子数组中较小的一个的大小≥原始数组的大小的α倍”,它要求的上述不平衡分割之间的平衡分割数。 此处有两个这样的平衡拆分

在位置50处,拆分的左侧包含大小为50的A,右侧包含大小为50的B。

位置51处的拆分在左侧包含大小为50的A,在右侧包含大小为50的B。

因此有98个不平衡拆分和2个平衡拆分,因此可以计算为

(拆分总数)-(不平衡拆分数)

(100)-(2 * 49)

2个平衡分割。

答案 6 :(得分:0)

另一种方法: 列出“更平衡”选项:

αn + 1 to (1 - α)n - 1

αn + 2 to (1 - α)n - 2

...

αn + k to (1 - α)n - k

总共k。我们知道最平衡的n / 2 to n / 2,所以:

 αn + k = n / 2 => k = n(1/2 - α)

同样,列出“不太平衡”选项:

αn - 1 to (1 - α)n + 1

αn - 2 to (1 - α)n + 2

...

αn - m to (1 - α)n + m

总共m。我们知道最不平衡0到n,所以:

αn - m = 0 => m = αn

因为所有这些选项都以相同的概率发生,所以我们可以使用概率的频率定义,所以:

Pr{更平衡} =(更平衡的总数)/(选项的总数)=>

Pr{More balanced} = k / (k + m) = n(1/2 - α) / (n(1/2 - α) + αn) = 1 - 2α