相关疑难解决方法(0)

随机列表,确保没有项目保持在同一位置

我想要洗牌一系列独特的项目,但不要做一个完全随机的洗牌.我需要确保混洗列表中的元素与原始列表中的位置不同.因此,如果原始列表是(A,B,C,D,E),这个结果就可以了:(C,D,B,E,A),但这个不会:( C,E,A, D,B)因为"D"仍然是第四项.该列表最多包含七个项目.极端效率不是一个考虑因素.我认为这对Fisher/Yates的修改可以解决问题,但我不能用数学方法证明:

function shuffle(data) {
    for (var i = 0; i < data.length - 1; i++) {
        var j = i + 1 + Math.floor(Math.random() * (data.length - i - 1));

        var temp = data[j];
        data[j] = data[i];
        data[i] = temp;
    }
}
Run Code Online (Sandbox Code Playgroud)

random algorithm shuffle permutation combinatorics

15
推荐指数
2
解决办法
4254
查看次数

生成列表的随机紊乱

如何随机洗牌以使所有元素都不在其原始位置?

换句话说,给定一个A包含不同元素的列表,我想生成B它的排列

  • 这种排列是随机的
  • 并为每个n,a[n] != b[n]

例如

a = [1,2,3,4]
b = [4,1,2,3] # good
b = [4,2,1,3] # good

a = [1,2,3,4]
x = [2,4,3,1] # bad
Run Code Online (Sandbox Code Playgroud)

我不知道这种排列的正确术语(它是"总"吗?)因此很难用谷歌搜索.正确的术语似乎是"紊乱".

python random permutation

12
推荐指数
2
解决办法
3167
查看次数

标签 统计

permutation ×2

random ×2

algorithm ×1

combinatorics ×1

python ×1

shuffle ×1