#!/usr/bin/env python
 
from random import randint
 
A = [0,1,2]
 
 
def swap(a, src, dst):
	temp = a[dst]
	a[dst] = a[src]
	a[src] = temp
 
 
def false_randomize(array):
	a = array[:]
	for i in range(len(a)):
		dest = randint(0, len(a)-1)	# Notice here we take our swap target index with equal probability in the range 0..N
		swap(a, i, dest)
	return a
 
 
def true_randomize(array):
	a = array[:]
	for i in range(len(a)):
		dest = randint(i, len(a)-1)	# Here our destination can only come from i..N
		swap(a, i, dest)
	return a
 
 
 
perms = [[0,1,2], [0,2,1], [1,0,2], [1,2,0], [2,0,1], [2,1,0]]
 
bins_false = [0]*6
bins_true = [0]*6
 
max_iterations = 100000
for i in range(max_iterations):
	bins_false[perms.index(false_randomize(A))] += 1
	bins_true[perms.index(true_randomize(A))] += 1
	if i%1000 == 0:
		print "iteration:", i
 
 
print "False randomize, permutation distribution:", [val/(1.0*max_iterations) for val in bins_false]
print "True randomize, permutation distribution:", [val/(1.0*max_iterations) for val in bins_true]

Alumni Liaison

Correspondence Chess Grandmaster and Purdue Alumni

Prof. Dan Fleetwood