大型数组的缓慢洗牌

7 浏览
0 Comments

大型数组的缓慢洗牌

我正在实现Fisher-yates洗牌算法在一个Photoshop脚本中。我想要从最大值为99999的集合中创建一个包含n个唯一随机元素的数组。其中n是一个小值,但最大可能达到最大值。

对于最大值在千以内的情况,这个算法运行很快(在毫秒级别),但对于10000个元素的情况要慢得多(大约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;
  var arr = new Array();
  
  for (var i = 0; i < m; i++) {
    arr.push(i);
  }
  
  while (m) {
    rnd = Math.floor(Math.random() * m-=1);
    temp = arr[m];
    arr[m] = arr[rnd];
    arr[rnd] = temp;
  }
  
  return arr;
}

0