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

时间:2013-04-23 16:15:54

标签: collections random arraylist runtime big-o

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

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

连连呢?谢谢!

1 个答案:

答案 0 :(得分:0)

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

一般来说,remove方法是O(n),但是如果你反复删除最后一个元素而不是第一个元素,那么数组不必不断地向下移动它的元素,所以它实际上是O(1) - 它是只是在平均和最差的情况下都是O(n)。