From: Johan Euphrosine Date: Sat, 1 Dec 2012 22:11:46 +0000 (-0800) Subject: math/rand: remove noop iteration in Perm X-Git-Tag: go1.1rc2~1737 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=d7b0f2a524743fef990c6905e628304a0065116f;p=gostls13.git math/rand: remove noop iteration in Perm The first iteration always do `m[0], m[0] = m[0], m[0]`, because `rand.Intn(1)` is 0. fun note: IIRC in TAOCP version of this algorithm, `i` goes backward (n-1->1), meaning that the "already" shuffled part of the array is never altered betweens iterations, while in the current implementation the "not-yet" shuffled part of the array is conserved between iterations. R=golang-dev CC=golang-dev https://golang.org/cl/6845121 --- diff --git a/src/pkg/math/rand/rand.go b/src/pkg/math/rand/rand.go index 94f84a85fb..ad2bf2fac0 100644 --- a/src/pkg/math/rand/rand.go +++ b/src/pkg/math/rand/rand.go @@ -100,7 +100,7 @@ func (r *Rand) Perm(n int) []int { for i := 0; i < n; i++ { m[i] = i } - for i := 0; i < n; i++ { + for i := 1; i < n; i++ { j := r.Intn(i + 1) m[i], m[j] = m[j], m[i] }