洗牌清单,但只是轻微一点

时间:2017-03-23 16:35:24

标签: python algorithm list random shuffle

在Python中,我希望以一种方式对列表进行混洗,使得每个元素的结束位置不超过N个元素,其中N是常量。另外,我希望这是公平的。也就是说,满足此约束的每个排列应该是同等可能的(在随机数生成器的实际限制内)。

例如,如果N为3,输入为[1, 2, 3, 4, 5, 6],则结果[2, 1, 3, 6, 4, 5]有效,但[6, 4, 1, 3, 5, 2]不会有效,因为6和2离他们的起始位置太远了。

在Python中有一种简单的方法吗?如果没有,是否有一些现有算法可以做到这一点?伪代码很好,我可以在必要时用Python实现它。

运行时并不是非常重要,因为我每隔几分钟就会在~100k元素上运行一次这样的随机播放,所以如果需要,我可以等待几秒钟让它运行。

0 个答案:

没有答案