问题简述如下:
给定 N 整数的数组A,数组中的每个元素可以增加固定数 b ,但概率 p [ i ],0< = i < 名词的。我必须找到使用bubble sort对数组进行排序的预期交换次数。
我尝试了以下内容:
1)元素A [ i ]的概率&gt; i 的<[em> j ]&lt; j 可以根据给定的概率轻松计算。 2)使用上面的我已经计算了预期的掉期数量:
double ans = 0.0;
for ( int i = 0; i < N-1; i++ ){
for ( int j = i+1; j < N; j++ ) {
ans += get_prob(A[i], A[j]); // Computes the probability of A[i]>A[j] for i < j.
基本上我得出了这个想法,因为预期的掉期数可以通过数组的反转次数来计算。因此,通过利用给定的概率,我正在计算数字A [ i ]是否将与数字A [ j ]交换。
我之前发布过a similar question但它没有受到所有约束。
我没有得到任何好的暗示我是否在正确的轨道上,所以我在这里列出了所有限制。如果我以不正确的方式思考问题,请给我一些提示。
答案 0 :(得分:2)
给定元素的预期交换数量只是它左边的元素的预期数量,大于它。
您可以通过指标变量的方法以及期望值具有linearity property的事实来快速计算。
假设您正在考虑元素a_3
。然后预期的交换次数就是
E [a_3的#top] = E [a_0> a_3] + E [a_1> a3] + E [a_2> A_3]
可以使用基本概率轻松计算右侧的每个个体期望值。
然后,预期的掉期总数只是每个元素的预期互换数除以2的总和(因为你重复计算)。