注:
本题解为个人完成,难免有疏漏,请勿抄袭,仅供参考,同时欢迎留言指正。
## 6.2 二分查找的区间范围设为
则比较
这样把单次的开销降到常数,总的开销就是
6.3
思路是对递归定义使用数学归纳法,以证明始终符合直接定义。
直接定义: + 根黑色,叶黑色 + 红色节点不连续出现 + 任意节点为根的子树,叶的黑色深度相等,该深度即红黑树的黑色高度
递归定义: + 基本情况,
6.4
分为内部黑色节点、内部节点、高度三个部分来证明,每次用数学归纳法同时证明
- 首先证
有不少于 个内部黑色节点, 有不少于 个内部黑色节点
- 基本情况:
, 有0个内部黑色节点; , 有0个内部节点, 有1个内部黑色节点 - 归纳推理:假设
, 有至少 个内部黑色节点, 有至少 个内部黑色节点,则 时, 有至少 内部黑色节点, 有至少 内部黑色节点 - 故对于任意非负整数
, 有至少 个内部黑色节点, 有至少 个内部黑色节点。
- 然后证
有不超过 个内部节点, 有不超过 个内部节点
- 基本情况:
, 有0个内部节点; , 有1个内部节点, 最多有3个内部节点 - 归纳推理:假设
, 有不超过 个内部节点, 有不超过 个内部节点,则 时, 有最多 内部节点, 有最多 内部节点 - 故对于任意非负整数
, 有不超过 个内部节点, 有不超过 个内部节点
- 最后证明
任意黑色节点的普通高度至多是该节点黑色高度的2倍, 任意黑色节点的普通高度至多是该节点黑色高度的2倍
- 先用数学归纳法,证
的根的黑色高度是 且 的根的叶子的黑色高度是 - 然后再用数学归纳法,证
的根的普通高度最多是 , 的根的普通高度最多是 - 由此可知,无论是
还是 ,其中任何黑色节点的普通高度至多是黑色高度的2倍。
6.5
- 考虑到
是非严格单调增的 - 检查
和 是不是0,以及是否满足零点存在性定理, 复杂度可判断是否存在 - 如果存在解,二分查找,
复杂度找到具体下标
6.8
(1)
遍历一次,找到最大值和最小值,复杂度
(2)
有序数组,直接取两端即可,复杂度
(3)
看到要求复杂度是
(4)
相当于第(3)问的一个部分,进行一层遍历,即计算相邻两个元素的差的绝对值,找到最小的且非0的即可。
6.14
(1)
假设不存在,由
(2)
- 二分查找,每次找区间
的中间的两个数进行比较,假设是 - 如果
,则以子区间(L,i+1)继续查找 - 如果
,则以子区间(i,R)继续查找 - 可以证明算法的正确性,用数学归纳法
- 二分查找,每次排除一半区间,复杂度