12-1 (带有相同关键字的二叉搜索树) 相同关键字给二叉搜索树的实现带来了问题。
a. 当用TREE-INSERT 将 n 个其中带有相同关键字的数据插入到一棵初始为空的二叉搜索树中,其渐进性能是多少?
ANSWER:当遇到不小于父结点的关键字时,是插入到右子树,所以当插入n个全部相同或者有序的关键字时,会变成链表,最坏情况的时间复杂度为O(n^2),树的高度是O(n)。
建议通过在第5行之前测试 z.key = x.key 和在第11行之前测试 z.key = y.key 的方法,来对 TREE-INSERT 进行改进。如果相等,根据下面的策略之一来实现。对于每个策略,得到将 n 个其中带有相同关键字的数据插入到一棵初始为空的二叉搜索树中的渐进性能。(对第 5 行描述的策略是比较 z 和 x 的关键字,用于第 11 行的策略是用 y 代替 x。)
b. 在结点 x 设置一个不二标志 x.b,并根据 x.b 的值,置 x 为 x.left 或 x.right,当插入一个与 x 关键字相同的结点时,每次访问 x 时交替地置 x.b 为 FALSE 或 TRUE。
ANSWER:这样插入输的高度将平衡地变为O(lgn),插入的时间复杂度是O(nlgn)。
c. 在 x 处设置一个与 x 关键字相同的结点列表,并将 z 插入到该列表中。
ANSWER:
树的期望高度为O(lgn),插入的期望时间为O(nlgn)。
最优情况是所有关键字都相同,则全部 n 个关键字都插入到结点列表中,插入列表时间为O(1),n 次插入时间为O(n)。
这种情况的最坏情况和期望时间与 n 个不带相同关键字的数据插入到二叉搜索树一样。
d. 随机地置 x 为 x.left 或 x.right。(给出最坏情况性能, 并非形式地导出期望运行时间。)
ANSWER:最坏情况就是和 a 的一样,相同关键字全部插入到同一侧。
12-2 (基数树) 给定两个串 a = a0a1...ap 和 b = b0b1...bq,这里每个 ai 和 bi 是以字符集的某种次序出现的,如果下面两种规则之一成立,就称串 a 按字典序小于串 b:
1.存在一个整数 j,其中 0 ≤ j ≤ min(p, q),使得对所有的 i = 0,1,... ,j-1,ai = bi 成立,且 aj < bj。
2.p < q,且对所有的i = 0,1,... ,p, ai = bi。
例如,如果 a 和 b 是位串ÿ