【问题标题】:How to shuffle an array using a seed whereby the sequence of elements remains consistent when additional items are added to the array如何使用种子对数组进行洗牌,从而在将其他项目添加到数组时元素序列保持一致
【发布时间】:2021-09-03 19:08:21
【问题描述】:

注意:这个问题可以适用于任何编程语言,例如 Python 或 JavaScript。


如何使用种子确定性地打乱一组元素,但保证以下内容:

  • 如果您在打乱前向数组中添加一个额外的元素,则原始元素的顺序与打乱原始数组时的顺序相同。

我可以用一个例子更好地解释这一点:

  • 假设数组 [a, b, c] 使用种子 123 进行混洗,这会产生输出 [c, a, b]。
  • 如您所见,b 在 a 之后,a 在 c 之后
  • 我们将一个附加元素添加到数组的末尾,[a, b, c, d],然后继续使用种子 123 进行混洗。
  • 这一次,b 必须在 a 之后,a 必须在 c 之后
  • 输出可能是 [c, a, d, b] 或 [d, c, a, b],但 不能 是 [b, a, c, d]。
  • 如果我们继续添加更多元素,也必须如此。

编辑:如果在数学上可能的话,洗牌列表中每个元素的位置应该是完全随机的(某些位置不应该偏向于某个元素)。

【问题讨论】:

    标签: arrays random shuffle seed deterministic


    【解决方案1】:

    (我对python很陌生)

    你在最后添加了额外的元素,但你也可以在随机播放后将其插入到随机位置

    import random
    x = ['a','b','c']
    random.Random(123).shuffle(x)
    print(x)
    
    x = ['a','b','c']
    random.Random(123).shuffle(x)
    x.insert(random.randint(0,len(x)),'d')
    print(x)
    

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

    【讨论】:

    • 谢谢,有趣的想法。为什么你会说附加元素有问题。为了清楚起见,我还对帖子进行了轻微编辑,“如果在数学上可能的话,洗牌列表中每个元素的位置应该是完全随机的(某些位置不应该针对某个元素有偏差)。”。但是,我认为您的方法确实符合该要求,因此不应更改任何内容。
    猜你喜欢
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    相关资源
    最近更新 更多