Array和Binary搜索树在效率上有什么区别?

时间:2011-12-27 16:35:58

标签: arrays algorithm binary-search-tree processing-efficiency

我想知道什么是最好的:数组或二进制搜索树(插入,删除,查找最大和最小)以及如何改进它们?

2 个答案:

答案 0 :(得分:14)

数组允许random access到其中的每个元素。所以你可以在O(1)中插入,删除和查找特定元素,并在O(n)中删除最大/最小值。 [您还可以制作最高/分钟O(1)并删除O(n)。如果您对数组进行排序,则会导致插入/删除为O(n),但您将获得O(logn) find,O(1) min / max。

按照定义对 BST 进行排序,对于常规[不平衡] BST,您会遇到O(n)最坏情况行为。对于平衡BST ,您可以O(logn)插入/删除/查找。你可以得到O(1) min / max两种方式。

由于您获得了更好的iterate性能,因此数组通常也更快cache [假设迭代次序并不重要]。此外,与BST不同,BST本质上具有无限大小,当数组已满时,数组需要重新分配和复制数据。

改善 BST可以通过balanced - AVLred-black-trees来完成。

哪个更好?这取决于应用程序。通常,当您计划插入数据并对其进行排序时,BST将是首选。如果随机访问或迭代是主要目的:通常使用数组。

答案 1 :(得分:13)

数组和二进制搜索树的性能比较:

                 Array                     Binary search tree
          Unsorted   Sorted           Average            Worst case
Space      O(n)       O(n)             O(n)               O(n)
Search     O(n)       O(log n) *       O(log n)           O(n)
Max/Min    O(n)       O(1)             O(1) **            O(1) **
Insert     O(1)       O(n)             O(log n)           O(n)
Delete     O(1)       O(n)             O(log n)           O(n)

*假设二元搜索

**需要额外指向min和max的指针,否则它是O(log n)