Ploblem 12-1
a.每次插入都会将元素添加到最右边叶子的右边,因为第11行中的不等式总是求值为false。这将导致运行时为z。
b.这种策略将导致两个子树中的每一个子树的大小相差最多为1。这意味着高度为Θ(lg(n))。所以总运行时间是
c.这将只需要线性时间,因为树本身的高度为0,并且单个插入到列表中可以在常数时间内完成。d.最坏情况下的性能是每个随机选择都在右边(或全部在左边),这将导致与问题的第一部分相同的行为,Θ(n^2)。为了非正式地计算期望的运行时间,只需注意在随机选择时,我们将大约有一半的时间选择左边,所以,树将大致平衡,所以,我们有深度大约是 lg(n),所以期望的运行时间将是nlg(n)。
Ploblem 12-2

树的根的单词必然在它的左子树或右子树的任何单词之前,因为它既短,又是这些树中每个单词的前缀。此外,左子树中的每个词都在右子树中的每个词之前,所以我们只需要执行一个预序遍历。这可以递归地完成,如练习12.1-4所示。
Ploblem 12-3
a.由于我们对所有节点x取d(x, T)值的平均值,所以它是
,但根据定义,这是
。
b.每个非根节点在到达该节点的路上都有一个来自根的第一条边的贡献,这条路径上的所有其他边都是通过查看以原始根的子树为根的两个子树中的边来计数的。因为有 n−1 个非根节点,我们有
c. 当我们在 n 个键上随机构建树时,我们有 n 种可能性来选择我们添加到树中的第一个元素,这个键将属于最终的根。假设在{0 ,…中的某个 i 有 i + 1 的阶统计量。 N − 1} 。然后,我们知道所有较小的元素都在左边而所有较大的元素都在子元素的右边。然而,它们彼此之间的顺序都是随机的,所以,我们有 P(i) = E[P(T L )] 和 P(n − i − 1)= E[P(T R )] 。因此,我们通过对放入 BST 的第一项的序统计量进行平均,得到了期望的不等式。d.![]()
然后,我们做替换 j = n− i− 1,然后做一个简单的事情,对第三个和求和得
到一个常数
e. 上一部分的递归式与问题 7-3 中展示的式 (7.6) 完全相同。 E 有解 Θ( n lg(n))f. 设选择的第一个枢轴是添加到二叉树中的第一个元素。因为每个元素都与根比较,每个元素都与第一个枢轴比较,我们就得到了我们想要的。然后,让下一个枢轴为左(resp 。右 ) 子数组是小于 (resp) 的第一个元素。大于根元素。然后,我们得到两个子树形成的剩余元素的分区与两个子数组左边形成的相同。这样我们就可以继续递归了。因为 if 在第一个元素成立,并且问题具有相同的递归结构,我们知道它在每个元素都成立。
Ploblem 12-4

a. 在一个顶点上有一个二叉树,只有一个根,所以 b 0 = 1 。为了计算有 n 个节点的二叉树的个数,我们首先从 n 个顶点中选择一个根。如果我们选择的根节点是 th 最小的元素,那么左子树将有 i - 1 个顶点,右子树将有 n - i 个顶点。这样的左子树和右子树的数量分别按频 i − 1 带 n − i 计数。对所有可能的根顶点的选择求和得到 :
b.
应用二次公式,注意取减号使 B(0) = 0 证明结果。
c. 用泰勒展开 √ 1− 4x 我们有:
从 x^ n 化简中提取系数得到结果d.将 Sirling 公式应用于
,得到渐近解 。