• Josh Bleecher Snyder's avatar
    math/rand: minor optimization to Perm · 4a18e0ed
    Josh Bleecher Snyder authored
    Instead of writing out 0..n and then reading it
    back, just use i when it is needed.
    
    Wikipedia calls this the "inside-out" implementation:
    http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle
    
    This yields identical values to the previous
    implementation, given the same seed. (Note that the
    output from Example_rand is unchanged.)
    
    2.8 GHz Intel Core i7, results very stable:
    
    benchmark          old ns/op    new ns/op    delta
    BenchmarkPerm3           138          136   -1.45%
    BenchmarkPerm30          825          803   -2.67%
    
    Stock Raspberry Pi, minimum improvement out of three runs:
    
    benchmark          old ns/op    new ns/op    delta
    BenchmarkPerm3          5774         5664   -1.91%
    BenchmarkPerm30        32582        29381   -9.82%
    
    R=golang-dev, dave, mtj, adg
    CC=golang-dev
    https://golang.org/cl/21030043
    4a18e0ed
rand.go 6.17 KB