期末考试第六题.docxVIP

  • 1
  • 0
  • 约小于1千字
  • 约 10页
  • 2022-09-11 发布于浙江
  • 举报
期末考试:第六题 徐臣 171180558 Emmm题目: 首先 若不是一棵BST ,或者有平衡性质的二叉树,在O(logn)的时间里是绝对无法完成的。 考虑极端情况 ,当树退化成链,根为最小值,查找为最大值。 此时无论如何都需要O(n)的时间去访问到叶子 故不可能在O(logn)时间内完成 做法: 题目不要求给出插入/删除的算法,只需要给出第k大的查找,并且是在BST上进行的。 早先学的最朴素的BST肯定是不能做的。 结合BST的结构特性 ,树上一条链的长度恰好是O(logn)的 那么算法很有可能就是在树上向下的遍历(单链)的,这样的复杂度恰好为O(logn) 如何做到单链的查询? 如果要单链,那么肯定没有向上(往根方向的)搜索,那么每一次向下的步骤里,我们都有保证,第k大的元素在这棵我们前往的子树中。 最简单的情况,假设当前我们在根,第k大在右子树的情况当且仅当 左子树里的元素个数+1(根)少于k。 假设左子树大小为i 这等价于根为第i+1大的元素 那么我们只需要在右子树找到比第i+1大的元素大k-(i+1)的元素就行了 否则第k大在左子树,此时和右子树完全没关系,可以直接前往左子树。 算法设计 定义Sz[rt]为rt为根的子树大小 算法为: Find(tree rt,int index) { If(Sz[rt-lson]+1==k) return rt-value

文档评论(0)

1亿VIP精品文档

相关文档