问题描述
我需要能够为某些对象分配一个整数 ID,以便在不再使用 ID 时可以“释放”其 ID。这些 ID 需要是唯一的,但是当 ID 空闲时,它就可以重新分配。
为了实现它,这里是我使用的算法(用 Python 翻译):
max_id = 0
freed_ids = [] # Could be a linked list,the aim is to append and pop in O(1)
def give_id() :
if len(freed_ids) == 0 :
id = max_id
max_id += 1
else :
id = freed_ids.pop()
return id
def free_id(id) :
if (id == max_id-1): # Small optimization
max_id -= 1
else
freed_ids.append(id)
注意:这不是我的实际代码,它只是一个例子来解释我目前所拥有的
如您所见,在这里我可以分配和识别并释放它,但复杂度为 O(1)
。但是,如果 id 没有按照分配的相反顺序释放,freed_ids
会增长很多,在我的情况下,ID 往往按照分配的顺序释放。当我分配一个 ID 时,我也为它分配了一些内存,我需要能够检索释放的 ID 来保存这些内存。
我是否以正确的方式解决问题?有什么算法可以帮助我吗?还有其他相关的优化吗?
如果您有好的算法要分享,请用您喜欢的任何语言编写。我的实际代码在 Ocaml 中,如果您知道可以帮助我的库,请告诉我。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)