Collections 在恒定时间内生成唯一的随机数

Collections 在恒定时间内生成唯一的随机数,collections,random,arraylist,runtime,big-o,Collections,Random,Arraylist,Runtime,Big O,有没有办法在恒定时间内生成唯一的随机数?我目前正在使用一个arrayList,它包含我所有可能的数字。它实现了收集,我正在调用这个arrayList上的shuffle方法。然后我将从arrayList中删除第0个元素以获得唯一的随机数,但我认为这不能是恒定时间,原因有二: 移除方法是O(n) Collection.shuffle是O(n) 建议?谢谢 Collection.shuffle确实是O(n),但只需要调用一次。如果你得到n个随机数,时间会扩散到剩下的运算中。(这就是摊销分析背后的想

有没有办法在恒定时间内生成唯一的随机数?我目前正在使用一个arrayList,它包含我所有可能的数字。它实现了收集,我正在调用这个arrayList上的shuffle方法。然后我将从arrayList中删除第0个元素以获得唯一的随机数,但我认为这不能是恒定时间,原因有二:

  • 移除方法是O(n)
  • Collection.shuffle是O(n)

建议?谢谢

Collection.shuffle确实是O(n),但只需要调用一次。如果你得到n个随机数,时间会扩散到剩下的运算中。(这就是摊销分析背后的想法,对于你的问题来说,这似乎是必要的:要么你想要“摊销的确定性常数时间”,要么你想要“预期常数时间”,就像一本字典所做的那样)


remove方法通常是O(n),但如果您重复移除最后一个元素而不是第一个元素,数组不必不断向下移动其元素,因此它实际上是O(1)——只是在平均和最坏的情况下它是O(n)。

您的问题是不明确的。您想从集合中选择一个值,还是希望不替换地采样大小为k的子集?如果是一个子集,k是否有一个固定值或其他停止条件?而且,知道你在用什么语言工作也没什么坏处。