大型阵列的慢洗牌

问题描述

我正在 Photoshop 脚本中实现 Fisher-yates shuffle。我想从最多大约 99999 个中创建一个包含 n 唯一随机元素的数组。其中 n 是一个很小的值,但可以达到最大值。

最多一千以下这很好(以毫秒为单位运行),但对于 10,000(大约 20 秒)要慢得多。

有没有更好/更快的方法来做到这一点?请记住,它需要在 ECMAScript 中。

var maxNumber = 99; 
var numToGenerate = 5; 

var bigShuffle = shuffle(maxNumber);
var randomNumbers = bigShuffle.slice(0,numToGenerate);

alert(randomNumbers);


function shuffle(m)
{

   var temp;
   var rnd;

   // create an empy array
   var arr = new Array();

   for(var i = 0 ; i < m; i++) 
   {
      arr.push(i);
   }

   while (m)
   {
      rnd = Math.floor(Math.random() * m-=1);
      // And swap it
      temp = arr[m];
      arr[m] = arr[rnd];
      arr[rnd] = temp;
   }

  return arr; 
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)