【发布时间】:2016-09-30 01:08:36
【问题描述】:
在什么情况下,使用二叉搜索树搜索术语需要与术语词汇量(例如 M)成线性关系的时间复杂度?如何保证 log M 的最坏时间复杂度?
【问题讨论】:
-
您可以拥有像 AVL 树这样的自平衡树,否则在最坏的情况下,二叉树将倾斜(左或右),并且它的最坏情况时间复杂度等于树……
标签: data-structures time-complexity binary-search-tree
在什么情况下,使用二叉搜索树搜索术语需要与术语词汇量(例如 M)成线性关系的时间复杂度?如何保证 log M 的最坏时间复杂度?
【问题讨论】:
标签: data-structures time-complexity binary-search-tree
完全二叉树是指除了最后一层之外的每一层都被完全填满的树。最坏情况下的搜索性能是树的高度,在这种情况下为 O(lgM),假设树中有 M 词汇。
确保这种性能的一种方法是使用自平衡树,例如一棵红黑树。
【讨论】:
由于二分查找是一种分治算法,如果树是平衡的,我们可以确保 O(log M),任何节点的子树下的项数相等。 O(log M) 基本上意味着时间线性增长,而 M 呈指数增长。如果搜索一个有 10 个节点的平衡二叉树需要 1 秒,那么搜索一个 100 个节点的平衡二叉树需要 2 秒,搜索 1000 个节点需要 3 秒,以此类推。
但是如果二叉搜索树极度不平衡到看起来很像链表的地步,我们将不得不遍历每个节点,需要与 M 成线性关系的时间复杂度。
【讨论】: