通过注册和取消注册来管理唯一的整数 ID

问题描述

我需要能够为某些对象分配一个整数 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...