Just look up "Fisher-Yates shuffle" and use it. It's better than any number
of home-rolled randomizers.
On 8/13/07, Jesse Graupmann <[EMAIL PROTECTED]> wrote:
>
> Steven,
>
> I'm not really sure how to compare the differences between array sorts,
> but
> this seemed pretty straight forward.
>
> >From what I can tell, using Math.round(Math.random()*2)-1 produced less
> movement in original number position than Math.round(Math.random()).
>
>
>
> //
> // TEST
> //
>
> var array = [0,1, 2, 3, 4, 5, 6, 7, 8, 9 ];
>
> function randomizeArray ( a ) {
> // 0, 1
> var na = [].concat(a).sort ( function (){ return
> Math.round(Math.random()); } );
> analyzeArray( na );
> return na;
> }
> function randomizeArray2 ( a ) {
> // -1, 0, 1
> var na = [].concat(a).sort ( function (){ return
> Math.round(Math.random()*2)-1; } );
> analyzeArray( na );
> return na;
> }
>
> function analyzeArray ( a )
> {
> var len = a.length;
> var mov = new Array (len);
> var med = 0;
> var avg = 0; // average movement
> var ttl = 0; // total movement
>
> for ( var i = 0; i < len; i++ )
> {
> var num = a[i];
> var dist = i-num;
> mov [num] = dist;
> med += dist;
> ttl += Math.abs( dist );
> }
>
> avg = ttl / len;
> trace('\nttl: ' + ttl + ' avg: ' + avg + ' med: ' + med + '
> mov: ' + mov )
> }
>
> trace( '\n++++++++++++++++++++++++++ 1\n');
>
> trace (randomizeArray ( array ));
> trace (randomizeArray ( array ));
> trace (randomizeArray ( array ));
> trace (randomizeArray ( array ));
> trace (randomizeArray ( array ));
> trace (randomizeArray ( array ));
> trace (randomizeArray ( array ));
>
> trace( '\n++++++++++++++++++++++++++ 2\n');
>
> trace (randomizeArray2 ( array ));
> trace (randomizeArray2 ( array ));
> trace (randomizeArray2 ( array ));
> trace (randomizeArray2 ( array ));
> trace (randomizeArray2 ( array ));
> trace (randomizeArray2 ( array ));
> trace (randomizeArray2 ( array ));
>
> trace( '\n++++++++++++++++++++++++++ org\n');
>
> trace( array ); // no change good
>
>
> //
> // OUTPUT
> //
>
> ++++++++++++++++++++++++++ 1
>
>
> ttl: 30 avg: 3 med: 0 mov: 7,0,6,2,-1,-1,0,-7,-6,0
> 7,1,8,4,5,3,6,0,2,9
>
> ttl: 38 avg: 3.8 med: 0 mov: 9,-1,2,5,2,-2,1,-5,-3,-8
> 1,9,7,5,2,8,4,6,3,0
>
> ttl: 22 avg: 2.2 med: 0 mov: 4,1,-1,-3,4,2,0,-2,-5,0
> 3,2,1,8,0,7,6,5,4,9
>
> ttl: 12 avg: 1.2 med: 0 mov: 4,0,-2,0,-2,0,0,1,1,-2
> 2,1,4,3,0,5,6,9,7,8
>
> ttl: 30 avg: 3 med: 0 mov: 7,0,4,-1,-4,4,-1,-3,-5,-1
> 4,1,3,8,7,6,2,0,9,5
>
> ttl: 22 avg: 2.2 med: 0 mov: 7,0,-2,2,0,1,-3,1,-6,0
> 2,1,8,6,4,3,5,0,7,9
>
> ttl: 36 avg: 3.6 med: 0 mov: 7,2,6,3,-2,0,-5,-7,-4,0
> 7,6,4,1,8,5,3,0,2,9
>
> ++++++++++++++++++++++++++ 2
>
>
> ttl: 16 avg: 1.6 med: 0 mov: 0,5,3,-1,-3,-2,-2,0,0,0
> 0,4,3,5,6,2,1,7,8,9
>
> ttl: 24 avg: 2.4 med: 0 mov: 0,0,7,1,2,-2,2,-2,-1,-7
> 0,1,9,5,3,7,4,8,6,2
>
> ttl: 32 avg: 3.2 med: 0 mov: 1,8,3,0,2,-3,2,0,-4,-9
> 9,0,5,3,8,2,4,7,6,1
>
> ttl: 10 avg: 1 med: 0 mov: 0,0,1,4,0,-3,0,-2,0,0
> 0,1,5,2,4,7,6,3,8,9
>
> ttl: 22 avg: 2.2 med: 0 mov: 0,0,4,5,1,-1,-4,0,1,-6
> 0,1,6,9,5,4,2,7,3,8
>
> ttl: 20 avg: 2 med: 0 mov: 0,2,2,-1,3,3,-5,-1,-3,0
> 0,6,3,1,2,8,7,4,5,9
>
> ttl: 22 avg: 2.2 med: 0 mov: 1,6,0,0,0,4,-1,-1,0,-9
> 9,0,2,3,4,6,7,1,8,5
>
> ++++++++++++++++++++++++++ org
>
> 0,1,2,3,4,5,6,7,8,9
>
>
>
>
> _____________________________
>
> Jesse Graupmann
> www.jessegraupmann.com
> www.justgooddesign.com/blog/
> _____________________________
>
>
> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] On Behalf Of Steven
> Sacks
> Sent: Monday, August 13, 2007 11:23 AM
> To: [email protected]
> Subject: Re: [Flashcoders] array copy with random order
>
> > array2.sort ( function (){ return Math.round(Math.random()); } );
>
> That's brilliant! :)
>
> To build upon that with all 3 outcomes (-1, 0, 1), you can use:
>
> Math.round(Math.random() * 2) - 1)
>
> _______________________________________________
> [email protected]
> To change your subscription options or search the archive:
> http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
>
> Brought to you by Fig Leaf Software
> Premier Authorized Adobe Consulting and Training
> http://www.figleaf.com
> http://training.figleaf.com
>
_______________________________________________
[email protected]
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com