【发布时间】:2013-08-21 23:37:12
【问题描述】:
我想要一个算法/函数,给定一个数字 N,在恒定时间内生成从 0 到 N - 1 的随机数。在第 N 次调用之后,函数可以随心所欲。此外,算法在请求时生成数字而不是使用改组也很重要,因为我可能(并且在平均情况下)不需要完整的数字列表。最好的方法是什么?
(阅读可选)我想有一个数字哈希集,并一次提取一个数字,但这需要首先将所有元素(我通常不需要)插入哈希集中。 . 这行不通... 啊
提前感谢您的帮助。
【问题讨论】:
-
您要的是没有显式随机播放的随机播放功能?您确实意识到在 N-1 次调用之后,返回值不再是非常随机的,对吧?而且我认为按顺序返回数字的函数(与任何其他“随机播放”一样可能)不能满足您的需求。也许您想更具体地提出您的要求?为什么不在第一次通话时随机播放?
-
我不想在第一次调用时随机播放,因为元素列表很大,而且我平均只需要遍历前几个元素。
-
另外,“恒定时间”是指每次调用的时间完全相同,还是只是 O(1)?此外,您完全不清楚您想要什么样的概率分布——均匀随机是最简单的,但您的规范似乎暗示您想要别的东西。
-
那么你真正想要的是一个来自大范围(比如 M 个整数)的小随机样本(比如 N 个数字),所有样本都是唯一的,其中 N 比 M 小得多?听起来像 Bob Floyd 的算法。
标签: performance algorithm random unique