[Python-Dev] a note in random.shuffle.__doc__ ...
Dan Christensen
jdc at uwo.ca
Tue Jun 13 17:22:58 CEST 2006
More information about the Python-Dev mailing list
Tue Jun 13 17:22:58 CEST 2006
- Previous message: [Python-Dev] a note in random.shuffle.__doc__ ...
- Next message: [Python-Dev] a note in random.shuffle.__doc__ ...
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Greg Ewing <greg.ewing at canterbury.ac.nz> writes: > Terry Jones wrote: > >> The code below uses a RNG with period 5, is deterministic, and has one >> initial state. It produces 20 different outcomes. > > You misunderstand what's meant by "outcome" in this > context. The outcome of your algorithm is the whole > *sequence* of numbers it produces, not each individual > number. I think Terry's point is valid. While no one call to random.shuffle(L) can produce every possible ordering of L (when len(L) is large), since random.shuffle shuffle's the data in place, repeated calls to random.shuffle(L) could in principle produce every possible ordering, since the "algorithm" is saving state. Down below I show code that calls random.shuffle on a 4 element list using a "random" number generator of period 13, and it produces all permutations. (More generally, there's nothing to stop someone from changing the random.shuffle code to explicitly store more internal state to ensure that every permutation eventually gets produced. I'm of course not suggesting that this would be a good idea!) In any case, the (old) text in the docstring: Note that for even rather small len(x), the total number of permutations of x is larger than the period of most random number generators; this implies that "most" permutations of a long sequence can never be generated. is at least a bit misleading, especially the "never" part. Dan import random i = 0 period = 13 def myrand(): global i i = (i+2)%period return float(i)/period def countshuffles(L, num): L = list(L) S = set([]) for i in range(num): random.shuffle(L, random=myrand) S.add(tuple(L)) return len(S) print countshuffles([1,2,3,4], 40)
- Previous message: [Python-Dev] a note in random.shuffle.__doc__ ...
- Next message: [Python-Dev] a note in random.shuffle.__doc__ ...
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-Dev mailing list