算法分析和解释分区

时间:2015-03-25 05:23:16

标签: algorithm sorting quicksort partitioning

question

所以我一直在研究这个问题而且一直被困住了。 我不觉得自己取得了任何进展,所以任何帮助都会很棒。

对于我。我认为可能是在分区左边的概率乘以在右分区上的概率。像(q/n)* ((n-q)/n)这样的东西。但是,如果我这样做,我会得到与iii完全相同的东西。哪个看起来不正确。

我是否正确地解决了这个问题?

我也不确定如何找到其他部分的预期元素数量。那有什么意思?我会用什么方程来解决这个问题?

如果它真的可以是什么,我们怎么知道预期呢? 我知道第q个位置已排序,我将如何使用它来解决它?

2 个答案:

答案 0 :(得分:0)

首先,假设每个排列具有相同的可能性,并且数组中的所有元素都是不同的。

最初位于q左侧的任何特定元素同样可能进入阵列中的任何剩余位置。这意味着它的概率为1 - q / n向右移动。类似地,最初位于q右侧的元素具有向左移动的概率(q-1)/ n。由于分区的实现方式,元素从不会从左侧移动到左侧的不同位置,或者右侧移动到右侧的不同位置。

期望是线性的,单个元素的预期移动次数就是它的移动概率。因此,从右到左的预期移动次数是移动次数的概率乘以最初在右边的元素的数量,或(n-q)(q-1)/ n。类似地,从左到右的预期移动次数是(q-1)(1-q / n)。因此,给定一个特定的q,期望值是这两者的总和,即2(n - q)(q - 1)/ n。

现在,为了获得除分区元素移动之外的整体预期移动数,我们必须总结q,每个q都有可能:

1 / n * sum(q = 0到n-1)2(n - q)(q - 1)/ n。

简化,这等于(n ^ 2 - 3n - 4)/ 3n。

最后,我们必须添加分区的预期移动次数,即(n - 1)/ n(因为它移动除非恰好是数组中的最小元素)。

再次简化,这给出了(n ^ 2 - 2n - 5)/ n。

(假设我在计算过程中没有犯错!)

答案 1 :(得分:0)

与@Anonymous一样,我假设这些元素都是不同的,并且排列的可能性也相同。

让我们首先解决第一个问题,让我们解决逆问题。那就是:

我。没有元素从q的左侧移动到右侧的概率是多少。

在发现之前,我想指出如果没有元素从左向右移动,那么也没有元素从右向左移动。这意味着问题i.iii.的答案是相同的,问题ii.iv.的答案也是如此。事实上,这很容易通过对称来建立。

所以,让我们计算一下概率。让我们将可能的案例除以q的值并总结。对于任何给定的qq从1开始),您有q-1个小于它的数字。您左侧还有q-1个插槽,右侧还有n-q个插槽。要使n-1数字(位于q位置的枢轴除外)的可能排列总数为(n-1)!。左侧较小q-1个数字,右侧较大n-q个数字的个案数为(q-1)!(n-q)!。因此发生这种情况的可能性是:

(q-1)!(n-q)!
------------
   (n-1)!

为了获得总机会,我们将所有可能的案例除以n(注意:我们计算的是条件概率。可能性的集合可以除以q的值到不同的其联合覆盖整个集合的子集。换句话说,完整概率可以计算为每个子集中概率的总和乘以该子集的概率。枢轴在位置q结束的概率是{{ 1}})。

1/n

这是没有元素从左向右移动的机会。因此,至少有一个元素移动的可能性为 n 1 ___ (q-1)!(n-q)! p = --- \ ------------ n /__ (n-1)! q=1 。这也可以改写为:

1-p

其中 n 1 ___ (q-1)!(n-q)! p_1 = --- \ (1 - ------------) n /__ (n-1)! q=1 是问题p_1的概率。请注意,sigma中的术语确实是给定i.的机会,至少有一些元素从左向右移动。我们将此q称为问题p_1q的概率,给定一个固定的i.


要回答第二个问题,我们知道预期值将是给定q乘以q机会的预期值的总和。如前所述,q为任何值的机会为q。现在,左边的元素数量的期望值是多少1/n需要向右移动?这本身就是不同值的总和乘以它们的概率。

如果给出q,则左侧有q个值需要向右移动。换句话说,k值大于位置k处的枢轴和q小于枢轴的值。这些机会是什么?您需要使用组合数据再次计算,其中左侧的q-k-1元素的k是从小于数据透视的q-1值中选择的。不幸的是,这个答案占用的时间比我预期的要长,我真的需要重新开始工作(另外,输入没有乳胶数学的方程式很痛苦)。希望这会帮助你自己继续解决这个问题。