【发布时间】:2010-11-28 12:36:09
【问题描述】:
我正在寻找一种方法来生成具有某种奇怪属性的伪随机流 - 我想要附近的数字团块。
棘手的部分是,无论范围有多大,我都只能保持有限的状态。有一些算法可以给出一系列具有最小状态的结果(线性同余?)
聚集意味着下一个数字接近而不是远的可能性更高。
理想序列示例(mod 10):1 3 9 8 2 7 5 6 4
我怀疑这在更大的流中会更明显,但很难手动进入。
更新:
我不明白为什么这是不可能的,但是,是的,我正在寻找,正如 Welbog 总结的那样:
- 不重复
- 非跟踪
- “聚集”
【问题讨论】:
-
如果您无法追踪您去过哪些号码,那么您就没有希望确保号码不会重复。 “结块”,就其本质而言,会导致碰撞。你不能同时拥有聚集、不跟踪和不重复这三者。
-
不重复是否意味着该值必须与前一个元素不同。或者它应该在整个范围内都是独一无二的?因为如果是前者,那么您可以使用与上次迭代相同的种子调用随机生成器。你还想要整数还是浮点数?
-
你不能同时拥有这三个,因为无状态分布必然允许重复。您需要值与以前的值保持接近这一事实使得它变得更加困难,因为您不能只使用任何非重复的混沌函数来实现它。如果您的域是实数,则可以使重复的可能性很小,但是如果不跟踪以前生成的内容,就不能使它们成为不可能。以你的例子为例,在不知道函数已经生成 1、3、9、8、2、7、5 和 6 的情况下,任何函数如何正确输出 4?它需要状态。
-
welbog - 声明很好(我在想有状态的 LCG)。只是状态必须相对于生成的流的大小保持不变(所以没有跟踪)
-
@OldCodeOrder:我想要一个算法来告诉我给定程序是否会因给定输入而停止。如果你能给我,我可以给你一个无记忆的非重复聚集随机分布。
标签: algorithm language-agnostic math random