Algorithm 如何在id序列中有效地重用已发布的id

Algorithm 如何在id序列中有效地重用已发布的id,algorithm,data-structures,time-complexity,generator,space-complexity,Algorithm,Data Structures,Time Complexity,Generator,Space Complexity,假设我们有一个PID生成器,它为7个进程{1,2,3,4,5,6,7}生成了7个ID。 过程3和6已完成,id 3和id 6已准备就绪。现在我们开始三个新的过程。 如何实现高效的算法,首先按照这个顺序为它们分配id3、6和8 我曾考虑将发布的ID存储在排序树中,但这需要额外的结构来跟踪序列中的“漏洞”。对使用中的id进行排序树结构有助于获得下一个最大的id,但它在查找漏洞方面是否有任何优势?只需使用优先级队列(堆)来跟踪所有漏洞,如下所示: #包括 std::优先级队列q; int all_fr

假设我们有一个PID生成器,它为7个进程{1,2,3,4,5,6,7}生成了7个ID。 过程3和6已完成,id 3和id 6已准备就绪。现在我们开始三个新的过程。 如何实现高效的算法,首先按照这个顺序为它们分配id3、6和8

我曾考虑将发布的ID存储在排序树中,但这需要额外的结构来跟踪序列中的“漏洞”。对使用中的id进行排序树结构有助于获得下一个最大的id,但它在查找漏洞方面是否有任何优势?

只需使用优先级队列(堆)来跟踪所有漏洞,如下所示:

#包括
std::优先级队列q;
int all_free_after=1;
无效自由\u一\u pid(整数pid){
//优先级队列返回队列中最大的一个
//但是我们想要最小的
//所以我们把相反的号码推到队列中
q、 推力(-pid);
}
int get_one_pid(){
if(q.empty()){returnall_free_after++}
int res=-q.top();
q、 pop();
返回res;
}

使用堆栈似乎是一个显而易见的解决方案。