在O(log N)中删除小于k的元素的数据结构,其中N是元素的数量

时间:2015-01-15 18:16:35

标签: algorithm data-structures

如何在O(log N)中实现具有以下功能的数据结构?

insert(x) - 添加整数以设置

member(x) - 检查set是否包含整数x

删除(x) - 从集合

中删除整数x

deleteLessThan(x)的 删除所有等于或小于k的数字

我唯一能想到的是使用某种平衡的BST来获取插入,成员和删除的O(log N)。

deleteLessThan()函数将如下所示:找到大于k的最小元素,删除其左子树然后重新平衡。但是,如果删除其中一个子树,是否可以在O(log N)中重新平衡BST?

1 个答案:

答案 0 :(得分:2)

摊销的log N足够好吗?在这种情况下,您可以使用splay树。除了删除元素< = k之外的所有操作都在维基百科上解释。对于剩余的操作,将大于k的最小元素展开到顶部,并删除其左子树。

如果您允许摊销,您可以轻松地在O(M)时间内删除N个节点中的M个。