需要数据结构

时间:2011-10-09 01:35:33

标签: data-structures

在做了一些思考之后,我得出结论,我需要一个支持的数据结构:

  • 插入
  • 删除
  • 查找
  • 删除最低要求

当然,我想以最好的复杂性实现这一点。

我的想法是,自平衡二分查找树将在O(log(n))中执行A-D(最坏情况)。 也许这可以以某种方式改进,所以A-C将在O(log(n))和D(我认为会更频繁)将在O(1)中运行。

我做了一个最糟糕的案例分析,但是如果你能想到一些“快速”运行的东西,但是它的摊销分析或平均而不是没有问题。 欢迎任何改进我的想法!

(注意:我相信A和D会比B和C更频繁)

2 个答案:

答案 0 :(得分:0)

它需要是某种排序的,平衡的树。任何树都不太可能明显更适合最小删除,因为它仍然需要重新平衡。您要求的所有操作都是O(log(n))。红黑树很容易用C ++和Java语言提供。

答案 1 :(得分:0)

您所描述的是priority queue,并通过“查找”操作进行了扩充。

通常以min-heap来实现。您列出的所有操作(“查找”除外)都在O(log n )中运行,特别是此作业的最高效整体数据结构。值得注意的是,这是一个二叉树的特例,它可以比一般的二叉搜索树更有效地实现,无论是在内存消耗和性能方面(相同的渐近性能,还有更好的常数因子)。

不幸的是,“find”仍然需要O( n )。

它在PriorityQueue类中以Java实现。