c – 如何使用运行时限制创建数据结构
作者:互联网
我需要实现一个支持插入删除和搜索的数据结构
O(log(n))并在O(1)中提取特殊对象.
我的数据结构需要保存按其ID排序的车辆,并且每辆车都有一个字段,表示下一次服务之前的时间.
我需要在O(1)中提取下一步需要服务的车辆.
欢迎所有建议.
我知道我需要两个独立的数据结构,我想到有1个设置和1个优先级队列,它们都按其他参数排序,但保留了相同指针的副本.我遇到的问题是,当我试图从“set”结构中删除时,我会在其他数据结构上保留垃圾(优先级队列).
解决方法:
哈希表将支持插入,删除和搜索,比O(log(n))好得多.这是假设你在成长表时不必重新哈希所有内容.困难的部分是在O(1)时间内定位“下一个”车辆.
根据实现,min heap将在O(1)和O(log(n))(摊销)插入之间给出,并且找到最小项目是O(1).从堆中删除项是O(log(n))操作,但在堆中查找任意项大于O(log(n)).
如果我要实现这一点,我将使用两个独立的数据结构:哈希表和最小堆.原因是哈希表提供了非常快速的插入,删除和查找,并且堆基于服务时间提供排序.唯一不符合您的起始要求的地方是删除车辆,因为这需要在堆中搜索任意项目.
实际上,将两个数据结构组合在一起以便您的哈希表存储堆节点对象(具有对实际数据的引用)而不是实际数据对象是可能的,尽管可能是混乱的.只要堆节点知道它在堆中的位置(即具有父指针以及左右子指针),就可以使用散列表来查找节点并从堆中删除该节点.
标签:c,data-structures,big-o 来源: https://codeday.me/bug/20191008/1874852.html