算法导论12章二叉搜索树 思考题总结

本文总结了二叉搜索树在处理相同关键字时的性能问题,提出改进策略,包括设置不二标志平衡树高和使用结点列表。讨论了基数树在位串排序中的应用,展示其在Θ(n)时间内完成排序的效率。同时探讨了随机构建二叉搜索树的平均结点深度,证明其平均深度为O(lgn)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 是位串ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值