MIT算法导论九 二叉搜索树

二叉搜索树(BST)

对一颗二叉查找树的任何节点,该节点的左子树中的任何一个节点的值都小于等于该节点的值,该节点的右子树中的任何一个节点的值都大于等于该节点的值
最坏时间复杂度O(n),一般时间复杂度O(lgn)
二叉查找树的特征可知,采用中序遍历一棵二叉查找树,可以得到树中关键字有小到大的序列

如何构造性能良好的二叉搜索树?

随机化

BST sort与quicksort 的关系:

BST SORT(A) {  
  T = 0   // Create an empty BST  
  for i=1 to n  
    do Tree-Insert(T,A[i])  
  Perform an inorder tree walk of T  
}  

Ex. A = [ 3 1 8 2 6 7 5 ]


建立二叉树
分析建立二叉树时间复杂,与快排完全一致
最好情况是完全二叉树,树完全是平衡的,高度也达到最小,时间复杂度为**Θ(nlgn)**
最差情况是当元素完全顺序或逆序时,生成的数就是一个链表,时间复杂度为**Θ(n^2^)**
基于快排的优化方案,自然就想到了随机化版本的BSTsort

先随机化的重新排列数组,然后再执行BST sort
快排的时间复杂度得BST sort的时间复杂度为Θ(nlgn)
进一步得到树的平均深度的期望:Θ(lgn)

我们关注的是平均高度而不是实际高度,即每个节点的高度和的平均值。而实际上,树的实际高度可能远大于logn


要证明的定理是随机化BST建立的树的高度的期望确实是lgn
这样才能证明建立随机化二叉搜索树,查询的时间复杂度为Θ(nlgn)
证明过程略

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 5,225评论 0 12
  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 4,509评论 1 31
  • 目录 1.各种表的对比参考基本数据结构ADT及其实现1.1 三种表1.2 表的两种实现(数组、链表)之间的对比1....
    王侦阅读 15,444评论 0 11
  • 四. 走向世界之巅——快速排序 你可能会以为归并排序是最强的算法了,其实不然。回想一下,归并的时间效率虽然高,但空...
    Leesper阅读 1,788评论 9 7
  • 0. 什么是树 数据的基本单位是数据元素,在涉及到数据处理时数据元素之间的关系称之为结构,我们依据数据元素之间关系...
    安安zoe阅读 499评论 0 0