【发布时间】:2012-07-05 14:45:45
【问题描述】:
问题简述如下:
给定一个由N个整数组成的数组A,数组中的每个元素都可以以一定的概率p[增加一个固定数b i],0 i n。我必须找到预期的交换次数,以便使用bubble sort 对数组进行排序。
我尝试了以下方法:
1) 元素 A[i] > A[j] 对于 i 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,但它没有所有限制。
无论我是否走在正确的轨道上,我都没有得到任何好的提示,所以我在这里列出了所有的限制。如果我以不正确的方式思考问题,请给我一些提示。
【问题讨论】:
-
您也可以执行冒泡排序并计算实际交换次数;) 无论如何,您说“数组的每个元素都可以增加一个固定数字 'b',概率为 p[i ]。”。什么时候发生?每次交换?排序前?
-
这发生在数组排序之前。而且我认为执行冒泡排序会使程序变得非常慢,因为它增加了复杂性,我必须为数组的每个可能配置运行它。
-
你真的认为这是一个编程问题吗?这听起来像是一个需要在纸上完成的问题。如果你在写程序,找到这个预期的数字,这个有什么实际用途?
-
什么是初始数组?答案在很大程度上取决于它是什么,或者分布是什么。
-
@TheRock,请告诉我我是否做对了。初始数组的元素都是相同的,或者是排序好的。然后每个元素可以以一定的概率增加一个固定的数量。之后进行理论上的冒泡排序,你需要计算这种排序的交换量吗?