算法导论 思考题12-1

12-1(带有相同关键字的二叉搜索树)相同关键字给二叉搜索树的实现带来了问题。

a.  当用TREE-INSERT n n n个其中带有相同关键字的数据插入到一棵初始为空的二叉搜索树中时,其渐进性能是多少?

最坏情况下,所有关键字相同,那么将形成一个单链。时间复杂度为 O ( n 2 ) O(n^2) O(n2)

 建议通过在第5行之前测试 z . k e y = x . k e y z.key = x.key z.key=x.key和在11行之前测试 z . k e y = y . k e y z.key = y.key z.key=y.key的方法,来对TREE-INSERT改进。如果相等,根据下面的策略之一来实现。对于每个策略,得到将 n n n个其中带有相同关键字的数据插入到一棵初始为空的二叉搜索树中的渐进性能。(对第5行描述的策略时比较 x x x z z z的关键字,用于第11行的策略是用 y 代 替 y代替 yx$。)


b. 在结点x设置一个布尔标志 x . b x.b x.b,并根据 x . b x.b x.b的值,置 x x x x . l e f t x.left x.left x . r i g h t x.right x.right。当插入一个结点与x关键字相同的结点时,每次访问 x x x时交替地 x . b x.b x.b为FALSE或TRUE。

采用这种策略时,多个相同关键字插入时,每个结点的左右子树高度叉不超过1。将形成一棵平衡的二叉搜索树,并在只有在第 k k k层填充后,才会填充下一层。因此渐进性能为 Θ ( n l g n ) \Theta(nlgn) Θ(nlgn)。下面时图示。下面的结点关键字均相同。

在这里插入图片描述


c. 在 x x x处设置一个与 x x x关键字相同的结点列表,并将 z z z插入到该表中。

相当于在结点处采用一个链表存储相同关键字的结点。因此,树的高度为0,采用前插法的方式,总的时间复杂度 O ( n ) O(n) O(n)


d. 随机设置 x x x x . l e f t x.left x.left x . r i g h t x.right x.right。(给出最坏情况性能,并非形式化的导出期望运行时间。)

最坏情况下,所有结点均插入左子树或右子树。每次操作为 O ( n ) O(n) O(n),总的时间复杂度为 O ( n 2 ) O(n^2) O(n2)。期望运行时间,即选择左子树或右子树的概率相同,因此树会大致平衡,树的高度为 O ( l g n ) O(lgn) O(lgn)。总的时间复杂度为 n l g n ( n ) nlgn(n) nlgn(n)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值