有没有办法在恒定时间内生成一个唯一的随机数?我目前正在使用包含所有可能数字的arrayList。它实现了Collection,我在这个arrayList上调用了shuffle方法。然后我从arrayList中删除第0个元素以获得唯一的随机数,但我认为这不能是恒定的时间有两个原因:
连连呢?谢谢!
答案 0 :(得分:0)
Collection.shuffle确实是O(n),但它只需要调用一次。如果你得到n个随机数,那么这个时间就会扩散到其余的操作中。 (这是摊销分析背后的一种想法,这对你的问题来说似乎是必要的:要么你想要“摊销的确定性恒定时间”,要么“预期的恒定时间”,就像你可能用字典做的那样)
一般来说,remove方法是O(n),但是如果你反复删除最后一个元素而不是第一个元素,那么数组不必不断地向下移动它的元素,所以它实际上是O(1) - 它是只是在平均和最差的情况下都是O(n)。