Data structures 如何确定要选择哪种树数据结构?
好吧,这一直困扰着我。我知道的树数据结构有:Data structures 如何确定要选择哪种树数据结构?,data-structures,tree,Data Structures,Tree,好吧,这一直困扰着我。我知道的树数据结构有: 非平衡二叉树 AVL树 红黑树 2-3棵树 B-树 B*-树 尝试 堆 我如何确定什么样的树是工作的最佳工具?显然,堆通常用于形成优先级队列。但其余的似乎只是做同一件事的不同方式。有没有办法为作业选择最好的一个呢?每一个都有不同的插入、删除和检索复杂度,都有O(n)个日志访问时间。与任何其他数据结构一样,您必须知道每种类型树的特征(搜索、插入和删除操作的复杂度),以及你选择工具的工作要求。对于您最常执行的操作类型,具有最佳性能的树通常是该作业的最
- 非平衡二叉树
- AVL树
- 红黑树
- 2-3棵树
- B-树
- B*-树
- 尝试
- 堆
我如何确定什么样的树是工作的最佳工具?显然,堆通常用于形成优先级队列。但其余的似乎只是做同一件事的不同方式。有没有办法为作业选择最好的一个呢?每一个都有不同的插入、删除和检索复杂度,都有O(n)个日志访问时间。与任何其他数据结构一样,您必须知道每种类型树的特征(搜索、插入和删除操作的复杂度),以及你选择工具的工作要求。对于您最常执行的操作类型,具有最佳性能的树通常是该作业的最佳工具
您通常可以在维基百科上找到任何类型数据结构的一般特征。也至少有一节(在某些情况下是一整章)介绍了您列出的大多数数据结构,因此这是另一个很好的参考。每棵树都有特定的特性,使它们在某种程度上有用。你应该把这些特点与你的需要进行比较。让我们一个一个地把它们挑选出来,好吗
- 非平衡二叉树
- AVL树
- 红黑树
这些在C++的“代码> STD::MAP< /COD>实现中使用,也可能在其他几个标准库中使用。然而,由于现代CPU的缓存行为,它们实际上在任何情况下都比B(+)树差。从历史上看,当缓存没有那么重要(或那么好)时,它们在主内存中使用时超过了B树
- 2-3棵树
- B-树
- B*-树
- 尝试
- 堆
如果您的性能需求真的很极端,请阅读康拉德·鲁道夫(Konrad Rudolph)的精彩回答: 您缺少了Andersson树(也称为AA树),它相当于2-3树,具有类似于红黑树的性能特征,但更容易实现另一种类似树的数据结构是treapsAnd deterministic skip list!我打算最终翻阅那本书。我只是发现在开始之前,通常更容易对我应该注意的事情有一个全面的了解。:-)@杰森:我也这么做,先查维基百科,然后再翻阅印刷品。