Professional Documents
Culture Documents
10 12章参考答案
10 12章参考答案
10 12章参考答案
4. 设 N=10^7,M=10^8,参考两种主要的做法:
①快速排序,排好后扫一遍,相邻两个数之间的值都是没有出现过的。时间复杂度 O(N
log N),空间复杂度 O(N);
②用桶或 bitmap 把这些值的位置标记上 1,存好后扫一遍,值为 0 的桶或 bit 就是没出
现过的。时间复杂度 O(M),空间复杂度 O(M)。
第十一章
1. 3 次
回顾课本 P308,第十一章课件 P47。
题目要求推导过程,最好不要写节点数量随层数的变化,而写关键码数量的变化,或者
要写清楚关键码数量和节点数量之间的关系,然后再写节点数量随层数的变化。
参考:42 阶 B 树各层极限结点和关键码数目
最少结点 最少关键码 最多结点 最多关键码
第0层 1 1 1 41
第1层 2 2×20=40 42 41×42=1722
第2层 2×21=42 2×20×21=840 42×42=1764 41×42×42=72324
第3层 2×21×21=882 2×20×21×21=17640
可关注勘误表教材勘误表第 27 行、课件勘误表第 49 行。
2. (1)
(2)
3. 不一定一样。具体说明举出一个一样的例子、一个不一样的例子即可。最好不要仅仅用
抽象的文字描述。注意检查初始的树满足红黑树所有性质。可参考:
(by 王嘉林)
4. 注意提到左右旋互逆
参考答案:执行一次右旋会让二叉搜索树少一个左儿子、多一个右儿子。因为任意左儿
子都可以右旋,所以任意二叉搜索树不断右旋直到不能执行时,树里没有左儿子,这时
树是一条向右的链。右旋次数不会超过原先树中左儿子的数量,不会超过 n。这样证明
了任意二叉搜索树通过 O(n)次右旋均可转化成向右的链。
考虑到右旋和左旋是互逆的,右旋之后对新成为右儿子的结点左旋即可恢复到右旋之前。
因此通过 O(n)次左旋可以把向右的链转化成任意二叉搜索树。
所以,任意二叉搜索树通过 O(n)次旋转可以转化为同样元素构成的任意二叉搜索树。
1.
3. (1)每次插入都选择右子树,时间复杂度O(𝑛 )
(2)左右子树大小最多差 1。时间复杂度O(𝑛𝑙𝑜𝑔𝑛)。
(3)该方法树高不会增长,时间复杂度O(𝑛)。
(4)最坏情况下与(1)相同为O(𝑛 )。期望情况下时间复杂度O(𝑛𝑙𝑜𝑔𝑛),因为出现一个深
度为𝑑的节点(设根节点深度为0)需要连续𝑑次随机全和之前某一个节点的随机相同。
设每个结点有1个随机序列,一共有𝑛个,所以一个随机序列前𝑑次随机与之前某个随机
序列前𝑑次随机完全相同的概率不会超过 ,期望上界为:
𝑛 𝑑 1
3𝑛𝑙𝑜𝑔𝑛 + 𝑛·𝑑· ≤ 3𝑛𝑙𝑜𝑔𝑛 + ≤ 3𝑛𝑙𝑜𝑔𝑛 + ≤ 3𝑛𝑙𝑜𝑔𝑛 + 2
2 𝑛2 2
为O(𝑛𝑙𝑜𝑔𝑛)级别。