数据结构有什么用途二叉搜索树,如果vector(按排序顺序)可以支持在log(n)时间插入,删除和搜索(使用二进制搜索)?
答案 0 :(得分:6)
树的基本优点是向量中的插入和删除不 O(log(n)) - 它们是O(n)。 (他们进行log(n)比较,但n移动。)
向量的优点是常量因子可能对它们有利(因为它们往往更加缓存友好,缓存未命中可能会使性能降低100倍)。
时排序的向量获胜
时树木胜利
...并且不要忘记哈希容器,这些容器是O(1)搜索, un 有序向量+线性搜索(对于一切都是O(n),但如果小的话足够的实际上是最快的。)
答案 1 :(得分:2)
如果在一些初始插入/删除之后只有搜索操作,则排序向量和BST之间的性能差异不会很大。如 在向量上进行二进制搜索将花费您与在BST中搜索密钥相同的成本。事实上,在这种情况下我会选择有序矢量,因为它更适合缓存。
但是,如果在搜索过程中频繁插入/删除,则排序后的矢量将不是一个好选项,因为元素需要在每次插入和删除后来回移动以保持矢量排序。
答案 2 :(得分:0)
理论上,在O(log(n))中的排序向量中不可能插入或删除。但如果你真的想要在BST和矢量中搜索的优势,我可以考虑一下这些事情:
BST和其他树结构占用" node"的大量小内存分配,并且每个节点都是固定的小内存块。 vector使用一个大的连续内存块来保存所有项目,并在重新调整大小时将内存使用量增加一倍(甚至三倍)。因此,在内存非常有限的系统中,或者在频繁发生碎片的系统中,BST可能会成功为所有节点分配足够的内存块,而向量无法分配内存。