【发布时间】:2015-11-28 05:32:09
【问题描述】:
我有一个非常大的集合(十亿 或更多,预计会以指数方式增长到某个水平),我想从中生成看似随机的元素而不重复。我知道我可以选择一个随机数并重复并记录我生成的元素,但是随着数字的生成,这会占用越来越多的内存,并且在数百万个元素出来之后就不实用了。
我的意思是,我可以说 1、2、3 到数十亿,每个都是常数时间,而不记得之前的所有内容,或者我可以说 1、3、5、7、9 和然后是 2,4,6,8,10,但是有没有更复杂的方法可以做到这一点并最终获得该集合的看似随机排列?
更新
1、集合在生成过程中不改变大小。我的意思是当用户的输入线性增加时,集合的大小呈指数增长。
2、简而言之,集合就像从1到100亿或更多的每一个整数的集合。
3,总之,它会上升到 100 亿,因为每个元素都携带了许多独立选择的信息,例如。想象一个 RPG 角色有 10 个属性,每个属性可以从 1 到 100(对于我的问题,不同的选择可以有不同的范围),因此有 10^20 个可能的字符,数字“10873456879326587345”将对应于具有“11, 88, 35...",我想要一种算法来一个一个地生成它们而不重复,但是让它看起来随机。
【问题讨论】:
-
集合的大小在整个过程中是固定的,还是会在选择两个数字之间增长?
-
您拥有的项目是一组还是列表/数组? IE。它是可索引的吗?参考:en.wikipedia.org/wiki/Set_(abstract_data_type) 和 en.wikipedia.org/wiki/Array_data_type
-
@biziclop 集合的大小在整个过程中是固定的。感谢您的提问,现在更新我的问题。
-
@Paddy3118 这是一个可枚举的集合。可以把它想象成一组从 1 到 100 亿或更多的整数。
-
如果两个角色至少可以共享一些属性设置,为什么不随机生成每个属性呢?
标签: algorithm random permutation