这就是问题所在:我尝试在两个元素之间随机选择 n 次(比如 [0,1] -> 0 或 1),我的最终列表将有 n/2 [0] + n/2 [ 1].我倾向于得到这种结果:[0 1 0 0 0 1 0 1 1 1 1 1 1 0 0,直到 n]:问题是我不想连续 4 或 5 次相同的数字所以经常。我知道我可以使用准随机化程序,但我不知道该怎么做(我使用的是 Python)。
最佳答案
为了保证零和一的数量相同,您可以生成一个包含 n/2 个零和 n/2 个一的列表,并使用 random.shuffle
对其进行随机排序。
对于小 n,如果您对结果通过您的验收标准不满意(例如没有太多连续相等的数字),请再次洗牌。请注意,这样做会减少结果的随机性,而不是增加它。
对于较大的 n,使用此方法找到符合您标准的结果将花费很长时间(因为大多数结果将失败)。相反,您可以使用这些规则一次生成一个元素:
- 如果您已经连续生成 4 个 1,则下一个数字必须为零,反之亦然。
- 否则,如果您需要生成 x 个 1 和 y 个 0,则下一个数字为 1 的概率为 x/(x+y)。
关于python - 使用 Python 进行准随机化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4630723/