• 算法打基础——二叉查找树Ⅱ


    这一讲主要是介绍随机化版本的二叉查找树。BST I中也介绍了查找树的效率的关键就是树的高度,而这里想通过

    随机化来使二叉查找树更加平衡,我们也将在数学上进行分析。

    这一讲的主要内容是:1. BST sort与quicksort 的关系 2.二叉树的随机化版本 3.随机BST depth的分析

     

    1. BST sort与quicksort 的关系

    首先要讲的这个问题非常有意思,BST与quicksort一直存在着默默的关系,Ta俩本可以做情侣,最后却发现互相

    是失散多年的兄妹关系。让我们首先考虑BST sort的过程:

    BST SORT(A)

    1  T <- Ø   // Create an empty BST

    2  for i=1 to n

    3    do Tree-Insert(T,A[i])

    4  Perform an inorder tree walk of T

    让我们来考虑一个例子,并分析一下整个过程。 A=[3 1 8 2 6 7 5]; 建好树后的结构是:

    分析时间复杂度: 对Tree-walk来说,时间复杂度就是Θ(n); 对于插入元素的过程,可以分别分析出现的最好的

    情况和最差的情况。 最好情况是完全二叉树,树完全是平衡的,高度也达到最小。 对满二叉树,因为其高度为

    lgn的个数是n/2,所以我们可以知道其复杂度是Θ(nlgn)。 当考虑最差情况,即元素时顺序或逆序是,生成的数就

    是一个链表,其复杂度是Θ(n^2)。

    根据上面的两个复杂度,我们很自然的想到了快排。 而实际上,BST sort和基本快排(即把第一个元素当分割点)

    执行了相同的比较,但是按照不同的顺序。  然后由基本快排的优化方案,我们自然就想到了随机化版本的BST

    sort。  

     2.二叉树的随机化版本

    随机化BST sort的主要方法是先随机化的重新排列数组,然后再执行BST sort. 根据快排的时间复杂度我们知道

    [T(BSTsort)=sum_{xin T}depth(x)=Theta(nlgn)] 所以我们可以得到树的平均深度的期望:[E[frac{1}{n}sum_{xin T}depth(x)]=Theta(lgn)]

    所以说,我们关注的是平均高度而不是实际高度,即每个节点的高度和的平均值。而实际上,树的实际高度可能

    远大于logn.  比如下面这个例子中,平均高度是lgn,但是实际高度是(sqrt[2]{n})

     

    3.随机BST depth的分析

    上面提到,随机化建立的树的高度可能不是lgn,而是节点的平均高度是lgn. 现在我们要证明的定理是随机化BST

    建立的树的高度的期望确实是lgn(一定注意和上面的区别!我还没太想明白)

    定理: E[height of rand built BST] = O(lgn)

    这里先给出证明提纲,明确思路!

    1 证明Jensen's 不等式 即 (f(E[x])≤E[f(x)]) for convex function f

    2 假设Xn是n个节点时树的高度的随机变量,我们考虑Xn的一个凸函数(Y_n = 2^{X_n})

    3 证明 (E[Y_n] = O(n^3))

    4 根据3的结论, (O(n_3)=E[Y_n]≥2^{E[X_n]}),即可得到(E[X]=O(lgn))

    定理具体的证明因为我实在不太会用自带的这个latex,所以我还是写到自己的算法笔记里面了。这里就给出上面的这些证明思路。

  • 相关阅读:
    大数据概述
    c语言文法
    实验一 词法分析程序实验
    语法分析程序
    第一篇博客~关于编译原理的理解
    《DenseNet Models for Tiny ImageNet Classification》课程设计论文
    物体检测的尺度效应实验
    16路PWM输出的pca9685模块
    Rocketlab公司火箭Electron介绍
    网址图书收藏
  • 原文地址:https://www.cnblogs.com/soyscut/p/3409542.html
Copyright © 2020-2023  润新知