如何创建具有运行时限制的数据结构

时间:2010-09-13 18:11:43

标签: c++ data-structures big-o

我需要实现一个支持插入删除和搜索的数据结构 O(log(n))并在O(1)中提取特殊对象。 我的数据结构需要保存按其ID排序的车辆,并且每辆车都有一个字段,表示下一次服务之前的时间。 我需要在O(1)中提取下一步需要服务的车辆。 欢迎提出所有建议。

我知道我需要两个独立的数据结构,我想到有1个设置和1个优先级队列,它们都按其他参数排序,但保留了相同指针的副本。我遇到的问题是,当我试图从“set”结构中删除时,我会在其他数据结构上保留垃圾(优先级队列)。

1 个答案:

答案 0 :(得分:3)

哈希表支持插入,删除和搜索,比O(log(n))好得多。这是假设你在成长表时不必重新哈希所有内容。困难的部分是在O(1)时间内找到“下一个”车辆。

根据实现,min heap将在O(1)和O(log(n))(摊销)插入之间提供,并且找到最小项目是O(1)。从堆中删除项是O(log(n))操作,但查找堆中的任意项大于O(log(n))。

如果我实现这个,我会使用两个独立的数据结构:哈希表和最小堆。原因是哈希表提供了非常快速的插入,删除和查找,并且堆基于服务时间提供排序。唯一不符合您的起始要求的地方是删除车辆,因为这需要在堆中搜索任意项目。

实际上,虽然可能很麻烦,但可能会将两个数据结构组合在一起,以便您的哈希表存储堆节点对象(它们具有对实际数据的引用)而不是实际的数据对象。只要堆节点知道它在堆中的位置(即具有父指针以及左右子指针),那么您可以使用哈希表来查找节点并从堆中删除该节点。