红黑树是我理想的数据结构吗?

时间:2010-03-24 14:21:46

标签: language-agnostic optimization data-structures binary-tree

我有一系列我将要处理的项目(大理性)。在每种情况下,处理将包括删除集合中的最小项目,做一些工作,然后添加0-2个新项目(总是大于删除的项目)。该集合将使用一个项目进行初始化,并且工作将继续进行,直到它为空。我不确定该系列可能达到的尺寸,但我希望在1M-100M范围内。我不需要找到除最小项目之外的任何项目。

我目前正计划使用红黑树,可能会调整以保持指向最小项目的指针。但是我之前从未使用过,我不确定我的使用模式是否符合其特性。

1)是否存在从左+随机插入删除模式会影响性能的危险,例如通过要求比随机删除显着更高的旋转次数?或者删除和插入操作仍然是这个使用模式的O(log n)?

2)其他一些数据结构是否会给我带来更好的性能,要么是因为删除模式还是利用了我只需要找到最小项目的事实?

更新:很高兴我问,对于这种情况,二进制堆显然是一个更好的解决方案,并且承诺结果非常容易实现。

雨果

3 个答案:

答案 0 :(得分:11)

binary heap对你想要的东西来说要好得多。它更容易实现和更快,因为您只关心定位最小的元素和插入。找到最小元素是O(1),删除它是O(log N),插入也是O(log N)。

答案 1 :(得分:5)

堆将为您提供 O(1) O(log n)删除和O(log n)插入,并且很多比红色更容易实现黑树

答案 2 :(得分:1)

如果需要,最好知道如何创建更复杂的数据结构。但是,一般来说,最好的办法是尽可能简单地开始,只有在需要时才使用更复杂的东西。

我唯一一次实现自平衡树的时候,有一次我碰巧知道我的树真的很大(超过10,000个元素),并且数据将按照分类喷射进行。这意味着如果我使用普通的二叉树,我最终会得到几乎一个链表。

如果您的数据是以随机顺序输入的,那么您真的不应该为平衡算法而烦恼。