【发布时间】:2012-08-31 13:47:06
【问题描述】:
我使用的是 C#,但即使你不知道,也应该很容易理解这个问题。
这是我的问题:我想将一些对象保存在类似哈希集的数据结构中,以便根据int ID 查找它们。这些对象具有可变属性,因此不能对它们进行散列(我需要一些关于它们的常量来散列,是吗?)。
我所做的是开发如下界面:
public interface IUniqueIDCollection
{
// Can return any int that hasn't been requested yet.
public int RequestUniqueID();
// Undos the requesting of an int
public int ReleaseUniqueID(int uniqueID);
}
我最初的想法是在IUniqueIDCollection 中存储一个内部计数器,该计数器会随着 ID 的请求而增加。但是,一旦 ID 被释放,我将不得不跟踪已删除的范围或单个 ID。我认为后者会更好。但是,如果我使用计数器(或任何循环函数)来生成 ID,我将不得不检查已连续请求的 ID 序列,一旦计数器回绕,则未释放。
启发式方法如下:假设一次最多请求 5,000 个 ID。但是,ID 通常会请求然后发布。释放往往会在范围内发生 - 即,可能会一次请求全部 100 个,然后在很短的时间间隔内释放所有 100 个。
我知道我可以使用 GUID 或其他东西代替 int,但我想节省 ID 的空间/带宽/处理时间。
所以我的问题是:考虑到启发式方法,就伪代码而言,我上面给出的接口中的请求和释放方法应该是什么样的?
【问题讨论】:
标签: algorithm data-structures random