我被要求设计一个代表字典的数据结构。字典包含具有不同键编号的项目。数据结构应支持O(1)时间内的以下操作:insert(x),delete(x),findMin(),findMax(),successor(x),predecessor(x)。搜索(x)操作也应该在O(log n)时间内。
分配给出了以下主题:跳过列表,哈希表和堆。我想最好的结构将是跳过列表,但我找不到在O(1)齿中实现插入和删除的方法。有什么建议吗?
答案 0 :(得分:0)
您应该同时使用哈希表和跳过列表数据结构。
每次插入元素时,您都可以更新min
和max
值。因此,findMin()
和findMax()
也是O(1)
insert()
和delete()
也处于不变的时间。
顺便说一下,在搜索之前无法删除项目。如果您在O(logn)
进行搜索,则delete()
会自动O(logn)
。
哈希表提供(如果正确实施),在O(1)
中搜索,删除和插入。其余操作(successor()
,predecessor()
)可在跳过列表中找到。