设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
虽然上面的推论似乎是正确的,但我仍然不太确定。所以我在这里分享。
如果出现问题,请纠正我。
答案 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 < j
与A[i] > A[j]
)或非反转(i < j
与A[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)
使用指标随机变量: