【发布时间】:2014-07-24 10:29:53
【问题描述】:
我正在寻找一种从某个区间 [a,b] 分配和释放整数的算法。
每次我们请求赋值时,算法都会在 [a,b] 范围内生成一个之前没有赋值过的整数。 我们可以通过要求算法释放之前分配的整数来释放它们。这样做会使它们再次可用于分配。
总结一下:
- 整数赋值后,直到释放后才能再次赋值
- 如果没有分配一个或多个整数,算法必须分配其中一个
- 当且仅当分配范围内的所有整数时,算法才分配无
希望算法的时间和空间复杂度都是次线性的(对于 n = b - a)。
作为额外要求,假设 [a,b] 中的某些特定整数需要初始分配。
【问题讨论】:
-
我可能错了,但我觉得我们可以使用与the pigeonhole principle 类似的逻辑来证明使用小于线性空间是不可能的。
-
听起来像一个稀疏集。见stackoverflow.com/questions/361040/…
-
@user2007447:(1) 散列使用的远不止线性空间,(2) 线性搜索只是愚蠢的 (3) 我看不出对“随机”的要求或建议。
-
如果 O(n) 空间是可以接受的,你可以用一个简单的队列来做到这一点。这将为您提供 O(1) 分配和 O(1) 释放。
-
在最坏的情况下绝对不能使用次线性空间,因为可用数字有 2^n 种可能的不同模式,并且每个模式都需要用不同的位模式表示。这意味着我们至少需要 lg(2^n) = n 位。
标签: algorithm data-structures language-agnostic computer-science