【发布时间】:2013-10-31 14:59:58
【问题描述】:
我想在 1 和 N 之间生成 n 个不同的数字(当然是 n
问题来了。如果我们不知道 n 有多大,我们该怎么办? 我希望算法只使用 O(n) 内存并在 O(n) 时间后停止。这可能吗?
【问题讨论】:
-
这是一个非常糟糕的副本 - N 有 1000 个,这里可能是“非常大”。
-
@j_random_hacker 使用 O(N) 内存(不是 O(n))。
-
@jrok:很公平,接近投票被撤回。但是我确实注意到该页面上的 O(1) 空间解决方案:stackoverflow.com/a/202225/47984。
-
@Floris:我的解释是他们想要一个online算法——也就是说,以后总是可以廉价地添加一个新的、不同的样本。
-
@j_random_hacker:如果将集合实现为哈希表,则可以得到 O(1)(至少在预期时间内)。