预期的反转次数 - 从Cormen的算法简介

时间:2011-10-18 08:53:48

标签: algorithm

设A [1 .. n]为n distinct个数组。如果我< j和A [i]> A [j],然后对(i,j)被称为A的反转。(有关反演的更多信息,请参阅问题2-4。)假设A的每个元素是从范围1中随机,独立和均匀地选择的。通过n。使用指标随机变量来计算预期的反转次数。


问题来自Cormen的算法导论练习5.2-5。这是我的递归解决方案:

  

假设x(i)是[1..i]中的反转次数,而E(i)是x(i)的期望值,则E(i + 1)可以如下计算:
  如果我们将 i + 1 放在第一个位置,那么我们有i+1个位置放置所有数字,然后x(i + 1)= i + x(i);如果我们将 i + 1 放在第二个位置,那么x(i + 1)= i-1 + x(i),...,所以E(i + 1)= 1 /( i + 1)* sum(k)+ E(i),其中k = [0,i]。最后我们得到E(i + 1)= i / 2 + E(i)。
  因为我们知道E(2)= 0.5,所以递归得到:E(n)=(n-1 + n-2 + ... + 2)/ 2 + 0.5 = n *(n-1)/ 4


虽然上面的推论似乎是正确的,但我仍然不太确定。所以我在这里分享。

如果出现问题,请纠正我。

5 个答案:

答案 0 :(得分:18)

所有解决方案似乎都是正确的,但问题是我们应该使用指标随机变量。所以这是我使用相同的解决方案:

    Let Eij be the event that i < j and A[i] > A[j].

    Let Xij = I{Eij} = {1 if (i, j) is an inversion of A

                        0 if (i, j) is not an inversion of A}

    Let X = Σ(i=1 to n)Σ(j=1 to n)(Xij) = No. of inversions of A.

    E[X] = E[Σ(i=1 to n)Σ(j=1 to n)(Xij)]

         = Σ(i=1 to n)Σ(j=1 to n)(E[Xij])

         = Σ(i=1 to n)Σ(j=1 to n)(P(Eij))

         = Σ(i=1 to n)Σ(j=i + 1 to n)(P(Eij)) (as we must have i < j)

         = Σ(i=1 to n)Σ(j=i + 1 to n)(1/2) (we can choose the two numbers in
                                            C(n, 2) ways and arrange them
                                            as required. So P(Eij) = C(n, 2) / n(n-1))

         = Σ(i=1 to n)((n - i)/2)

         = n(n - 1)/4

答案 1 :(得分:5)

另一种解决方案甚至比IMO更简单,尽管它不使用“指标随机变量”。

由于所有数字都是不同的,因此每对元素都是反转(i < jA[i] > A[j])或非反转(i < jA[i] < A[j]) 。换句话说,每对数字都是有序的或无序的。

因此,对于任何给定的排列,反转的总数加上非反转的数量只是对的总数,或n*(n-1)/2

通过“小于”和“大于”的对称性,预期的反转次数等于预期的非反转次数。

由于期望它们的总和是n*(n-1)/2(所有排列都是常数),并且它们是相等的,它们各自是n*(n-1)/4的一半。

[更新1]

显然,我的“少于'和'大于'的对称性”声明需要一些细化。

对于1到A范围内的任意数字n数组,请将~A定义为从n+1中减去每个数字时得到的数组。例如,如果A[2,3,1],则~A[2,1,3]

现在,请注意A中的任何数字对都是有序的,~A的相应元素是乱序的。 (很容易显示,因为否定两个数字会交换它们的顺序。)这个映射明确地显示了在此上下文中小于和大于的对称性(对偶性)。

因此,对于任何A,反转次数等于~A中的非反转次数。但对于每个可能的A,只有一个~A;如果统一选择数字,则A~A同样可能。因此A中预期的反转次数等于~A中预期的反转次数,因为这些期望是在完全相同的空间内计算的。

因此A中预期的反转次数等于预期的非反转次数。这些期望的总和是对和的期望,即常数n*(n-1)/2或总对数。

[更新2]

更简单的对称性:对于A元素的任何数组n,将~A定义为相同的元素,但顺序相反。将i中位置A处的元素与n+1-i中位置~A处的元素相关联。 (也就是说,在反转数组中将每个元素与自身相关联。)

现在A中的任何反转都与~A中的非反转相关联,就像上面的Update 1中的结构一样。因此适用相同的论点:A中的反转次数等于~A中的反转次数; A~A都是同等可能的序列;等

这里的直觉点是“小于”和“大于”运算符只是彼此的镜像,您可以通过否定参数(如Update 1中)或通过交换它们来看到(如同更新2)。因此,预期的反转和非反转次数是相同的,因为您无法判断是否通过镜像查看任何特定阵列。

答案 2 :(得分:1)

我认为这是正确的,但我认为证明这一点的正确方法是使用条件期望:

对于所有X和Y,我们有:E [X] = E [E [X | Y]]

然后在你的情况下:

E(i + 1)= E [x(i + 1)] = E [E [x(i + 1)| x(i)]] = E [SUM(k)/(1 + i)+ x(i)] = i / 2 + E [x(i)] = i / 2 + E(i)

关于第二个陈述:

如果:

E(n)= n *(n-1)/ 4。

然后E(n + 1)=(n + 1)* n / 4 =(n-1)* n / 4 + 2 * n / 4 =(n-1)* n / 4 + n / 2 = E(n)+ n / 2

所以n *(n-1)/ 4。验证所有n&gt; = 2的递归关系,并验证n = 2

因此E(n)= n *(n-1)/ 4

希望我理解你的问题并帮助

答案 3 :(得分:1)

更简单(类似于Aman上面的回答,但也许更清楚)......

Let Xij be a random variable with Xij=1 if A[i] > A[j] and Xij=0 otherwise.
Let X=sum(Xij) over i, j where i < j

Number of pairs (ij)*:               n(n-1)/2
Probability that Xij=1 (Pr(Xij=1))): 1/2
By linearity of expectation**:       E(X) = E(sum(Xij))
                                          = sum(E(Xij))
                                          = sum(Pr(Xij=1))
                                          = n(n-1)/2 * 1/2
                                          = n(n-1)/4

*  I think of this as the size of the upper triangle of a square matrix.
** All sums here are over i, j, where i < j.

答案 4 :(得分:0)

使用指标随机变量:

  1. 设X =随机变量,它等于反转次数。
  2. 如果A [i]和A [j]形成反转对,则设为Xij = 1,否则Xij = 0。
  3. 反转对的数量=超过1的总和&lt; = i&lt; j&lt; =(Xij)
  4. 现在P [Xij = 1] = P [A [i]> A [j]] =(n选择2)/(2!* n选择2)= 1/2
  5. E [X] = E [所有ij对的总和,使得i <1。 jij的j =所有ij对的总和,使得i <1。 e [Xij] = n(n - 1)/ 4
  6. 的j