Processing math: 100%

Exercise 5.3-3

Suppose that instead of swapping element A[i] with a random element from the subarray A[in], we swapped it with a random element from anywhere in the array:

PERUMTE-WITH-ALL(A)

1 n = A.length

2 for i = 1 to n:

3     swap A[i] with A[RANDOM(1, n)]

Does this code produce a uniform random permutation? Why or why not?

This code does not produce a uniform random permutation.

Unlike the code in Exercise 5.3-2, this code can actually produce all random permutations. The trouble comes from the uniform production requirement. Consider the case when n=3. We would expect all 6 possible permutations to be equally likely. Within the for loop we are exchanging A[i] with one of 3 different possible values, meaning there are 33=27 possible non-distinct outputs each with a 127 chance of ocurring. No matter how the possibilities are distributed, it is not possible to form a 16 chance by repeatedly summing 127 and so the production cannot be uniform.