问题描述
注意:此问题适用于任何编程语言,例如 Python 或 JavaScript。
您将如何使用种子确定性地打乱元素数组,但也保证以下内容:
- 如果在混洗之前向数组中添加其他元素,则原始元素的顺序与混洗原始数组时相同。
我可以用一个例子更好地解释这一点:
- 假设数组 [a,b,c] 用种子 123 打乱,这导致输出 [c,a,b]。
- 如您所见,b 在 a 之后,a 在 c 之后。
- 我们在数组的末尾添加一个额外的元素,[a,c,d],然后用种子 123 进行 shuffle。
- 这一次,b 仍然必须在 a 之后,a 仍然必须在 c 之后。
- 输出可能是 [c,d,b] 或 [d,b],但不能是 [b,d]。
- 如果我们继续添加更多元素,同样必须适用。
编辑:如果数学上可能,混洗列表中每个元素的位置应该是完全随机的(某些位置不应该对某个元素有偏见)。
解决方法
(我对 python 很陌生)
您在最后添加了附加元素,但您也可以在shuffle后将其插入到随机位置
import random
x = ['a','b','c']
random.Random(123).shuffle(x)
print(x)
x = ['a','c']
random.Random(123).shuffle(x)
x.insert(random.randint(0,len(x)),'d')
print(x)
但是如果添加更多元素,这将成为问题。