如何使用种子打乱数组,从而在向数组中添加其他项目时元素序列保持一致

问题描述

注意:此问题适用于任何编程语言,例如 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)

但是如果添加更多元素,这将成为问题。