n 个不同键上随机填充的二叉搜索树的预期高度为 O(log(n))

The expected height of a randomly filled binary search tree on n distinct keys is O(log(n))

我正在为学校做一个项目,作业有我们:

  1. 在二叉搜索树上实现 Tree-Insert(T,z) 操作。
  2. 在二叉搜索树中重复插入n个随机选择的数字并收集高度h。
  3. 在同一图上绘制数量 h/lg(n)n.

我有一个完整的程序,它输出 n 的值从 250-50K,我随机填充的 BST 的平均高度,以及 height 的值(n)/log2(n). 如果需要,我可以提供代码,但程序的伪代码如下所示:

collectData()
for n = 250 to 10,000 by 250 // 250, 500, 750, …. 10,000
    sum_heightn = 0
    for j = 1 to 10 do //Take 10 measurements mj for j=1 to 10
        for i = 1 to n
           pick randomly a number p in the range [0,n]
           create a node z
           set z.key = p
           Tree-Insert(T,z)
        Measure the height hj of the tree
        Discard Tree
        sum_height += hj
collect Height(n)= sum_heightn/10 // Average height for n
Write in a file F the value n and Height(n)/log_2(n).  

我正在努力理解计算 h(n)/log2(n) 时得到的值是什么意思。谁能帮忙解释一下?谢谢

一棵高度为 h 的二叉树最多可以有 2^h - 1 个节点。

     1
    / \
   /   \
  2     3

上面这棵树的高度是2,这棵树最多可以有的节点数是2^2 - 1 = 3.

log_2(n) 对于大 n 表示(大约)完全填充树的高度。同样,您可以渐进地说,具有 n 个节点的平衡树的高度将为 O(log_2(n)).

height / log_2(n) 只是一个可以达到

的比率
  • 最大 n / log_2(n) 当树倾斜时(当插入顺序增加或减少时)。
  • 当树完全平衡并且树的高度变为 log_2(n).
  • 时,最小值可达 1

您可以通过以下方式查看此比率:它描述了给定树的偏斜程度。如果此比率接近 n/log_2(n),则树 非常 偏斜,如果比率足够接近 1,则树 much ] 平衡。