荷兰国旗的平均互换数量

时间:2018-04-03 07:17:56

标签: algorithm sorting dutch-national-flag-problem

我只是想知道如何才能获得荷兰国旗两种颜色的平均掉期数量。排序正数和负数而不是颜色。我假设负数等于正数并且数组的数字是随机配置的,我不确定我的假设是否正确。

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

谢谢。

1 个答案:

答案 0 :(得分:0)

如果正面和负面的分布是均匀的,则第一个元素是正数,概率为1/2。在第一次迭代之后,数组缩短了一个元素,并且子数组的分布仍然是均匀的(移动元素是中性操作)。

在子阵列为空之前,确实有n次迭代,因此平均交换次数为n/2。更准确地说,掉期数遵循二项式定律,参数为1/2n(这是伯努利方案)。