大型数组的缓慢洗牌
- 论坛
- 大型数组的缓慢洗牌
7 浏览
大型数组的缓慢洗牌
我正在实现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; }