是否存在一种数据结构,表示主要操作的时间为O(n * log n)的有序列表?

时间:2019-04-29 19:57:04

标签: algorithm list sorting set structure

我正在寻找一种数据结构,该结构可以解决O(n * log(n))复杂性的特定问题。它需要代表一组整数,在其中我可以执行以下操作: -添加元素 -检查元素是否存在于集合中 -删除每个大于给定整数的值 希望具有对数复杂性。

我正在寻找链接列表,因为在中间添加元素并删除结构的整个部分很容易,但是我不知道如何保留有序列表或实现二分法搜索。起初,我在考虑哈希表,但不知道如何过滤该集合。我正在查看平衡的二叉树,我不知道我是否在寻找某种幻想,或者它是否以某种方式存在,而我却找不到。

1 个答案:

答案 0 :(得分:0)

对于从头开始实施,我建议使用Treap

Treap只是一个二叉搜索树,每个节点都有一个随机优先级,它满足了作为树的堆条件。这种随机数据结构使查找,插入,删除和拆分树的预期时间为O(log(n))。前三个非常简单。要进行拆分,您只需在节点上放置一个要比根节点更高优先级的节点。然后一半缠绕在该节点的一侧,另一半缠绕在另一侧。

请注意,虽然拆分为O(log(n)),但释放已删除的位为O(n)

请注意,您可能不必执行任何操作。例如,在C ++中,您可以仅使用std::map。除删除外,这些操作的性能为O(log(n))。从大小为m的结构中删除长度为n的范围是O(m + log(n))。如果您考虑有关释放内存的评论,那是理想的选择。