我只是想知道如何才能获得荷兰国旗两种颜色的平均掉期数量。排序正数和负数而不是颜色。我假设负数等于正数并且数组的数字是随机配置的,我不确定我的假设是否正确。
Algorithm(A[0…n-1]):
i ← 0
j ← n - 1
while i ≤ j:
if A[i] < 0:
i ← i + 1
else:
swap(A[i], A[j])
j ← j - 1
谢谢。
答案 0 :(得分:0)
如果正面和负面的分布是均匀的,则第一个元素是正数,概率为1/2
。在第一次迭代之后,数组缩短了一个元素,并且子数组的分布仍然是均匀的(移动元素是中性操作)。
在子阵列为空之前,确实有n
次迭代,因此平均交换次数为n/2
。更准确地说,掉期数遵循二项式定律,参数为1/2
,n
(这是伯努利方案)。