【发布时间】:2013-09-08 06:40:00
【问题描述】:
我有一个这样的数组
[0,2,3]
这个数组可能的改组是
[0,2,3], [2,3,0], [3,0,2], [3,2,0], [0,3,2], [2,0,3]
如何获得这些组合?我目前唯一的想法是
n = maximum num of possible combinations, coms = []
while( coms.length <= n )
temp = shuffle( original the array );
if temp is there in coms
return
else
coms.push(temp);
但我认为这不是有效的,因为这里我们一味地依赖于随机分布的均匀分布。
对于这个问题是否有其他发现?
【问题讨论】:
-
查看 [this][1] 和 [this][2] 帖子以获得您的答案。 [1]:stackoverflow.com/questions/6274339/… [2]:stackoverflow.com/questions/2450954/…
-
@Riku 感谢您提供有用的链接,我的问题不是关于洗牌算法。我可以使用 Fisher-Yates 算法。对于每次迭代,我需要检查现有数组中是否有相同的项目并继续。这非常耗时且不以性能为导向。
-
“Shuffle”是错误的关键字;你想要“排列”
-
我用迄今为止发布的选项制作了一个 JsPerf:jsperf.com/permutations-implementation 随意在更多浏览器上对其进行测试以获得更准确的结果。
标签: javascript