我不确定声明是否完全正确,但如果确实如此,请回答我为何如此。
据我所知,二叉搜索树的复杂度为O(log n)
,但在输入偏斜的情况下,它再次变为O(n)
,这与在数组中进行简单存储和搜索的情况相同。那么它是如何更好还是不是?
编辑:场景是:我们需要在运行时不断插入和搜索数据,这必须进行优化。
答案 0 :(得分:2)
如果您询问性能,则取决于应用程序。但是,我可以简要地解释一下究竟发生了什么以及它是如何工作的。
ARRAY
数组允许随机访问其中的每个元素。对于插入,删除和查找,特定元素的复杂度为O(1)。最大/最小,删除O(n)。此外,我们可以生成最大/最小O(1)并删除O(n)。如果您的数组已排序,它将导致插入/删除为O(n),但您将获得O(logn)查找和O(1)min / max。
BINARY SEARCH TREE
另一方面,二进制搜索树按定义排序。不平衡的二进制搜索树,在最坏的情况下它有O(n)。但是,对于平衡二进制搜索树,它给出了O(logn)的复杂性。 对于两者而言,复杂度可以是O(1)min / max。
如果遍历的顺序不重要,则通常也可以更快地进行迭代,因为您可以获得更好的缓存性能。此外,由于数组本质上是无限大小的,因此当数组已满时,数组需要重新分配并复制数据。
通常,当您计划插入数据并对其进行排序时,首选二进制搜索树。但是如果你想随机访问/遍历,通常使用数组。
看看这个:http://arstechnica.com/civis/viewtopic.php?f=20&t=1107717