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

Reply via email to