【发布时间】:2015-05-05 09:34:57
【问题描述】:
我有一个给定大小的数组。我想以伪随机顺序遍历它,保持数组完整并访问每个元素一次。最好将当前状态存储在几个整数中。
我知道you can't have full randomness without storing full array,但我不需要真正随机的顺序。我需要它被用户认为是随机的。解决方案应使用亚线性空间。
一个可能的建议 - 使用大质数 - 是given here。这个解决方案的问题是有一个明显的固定步骤(采取模块数组大小)。我更喜欢一个不是那么明显非随机的解决方案。有没有更好的解决方案?
【问题讨论】:
-
您是否对多次访问给定元素感到满意?即您是在寻找元素的随机排列还是元素的随机序列?您引用的问题与第一个问题有关(也称为改组)。
-
许多(大多数?)伪随机数生成器可以由算法和一个或两个整数来定义,以描述它们的当前状态。考虑到这些因素,他们未来的行为完全是确定性的,尽管显然是随机的——这就是 pseudo 在这里的意思。你在找什么不是 PRNG 的?
-
显然,我需要避免重复(否则我只能跳到随机元素)。我编辑了问题,添加了该信息。实际上,所需的解决方案应该以允许从任何状态以 N 步遍历 N 个元素的方式存储当前状态。
-
显然,我需要避免重复 不,在您编辑之前一点都不明显,它对潜在的解决方案有重大影响。
-
TBH,我认为原件已经很清楚了,
I want to traverse it is pseudorandom order。 Traverse 确实意味着每个元素都被访问过一次,但可能只有我和我的英语不好。
标签: c++ arrays algorithm random