zoukankan      html  css  js  c++  java
  • Algs4-2.4.7大堆中第k大元素所在的位置(满树时,非满树未解决)

    2.4.7在堆中,最大的元素一定在位置1上,第二大的元素一定在位置2或者3上。对于一个大小为31的堆,给出第k大的元素可能出现的位置和不可能出现的位置,其中k=2、3、4(设元素值不重复)。
    解:
    堆是满树时:
    堆有f层,f=log(n+1)。以任意结点为根的子树都是满树,以第k大结点为根的子树的最高满子树有fc层,fc=下取整(log(n-k+1+1)),那么第k大结点在堆中的最高层为ftop,ftop=堆层f-最高满子树层fc+1=f-fc+1。
    图片

    第k大结点在堆中沿简单路径放置时,最低可以放在第k层,由于堆只有f层,所以第k大结点所在的最低层fbot=min(k,f)。
    图片

    那么第k大元素所在的层fk的范围是:ftop<=fk<=fbot。

    第k大元素可以在其所在层的任意位置上放置,这个可以通过交换其兄弟子树的位置 和 其层层父结点的子树和其层层父结点兄弟的子树的方式得到。
    图片

    那么最终得到在堆是满树时,第k大元素可以放在fk层的所有位置,位置pk的范围为:2^ftop<=pk<2^fbot
    图片

    excel表计算结果如下:
    图片
    公式说明:
    最顶层=CEILING(LOG(2*($B$1+1)/($B$1-A3+2),2),1)
    最底层=MIN(A3,LOG($B$1+1,2))
    开始位置=POWER(2,B3-1)
    结束位置=POWER(2,C3)-1

    堆不是满树时:
    分析不出。




  • 相关阅读:
    java中清空session
    freemarker中修改和添加功能中包含checkbox复选框默认选中需求的解决方式
    Highcharts动态赋值学习
    CSDN Luncher
    JS导入导出Excel表格的方法
    js 下载文件的操作方法
    模板标签的作用
    css3的calc()
    JS滚轮mousewheel事件和DOMMouseScroll事件
    css BFC(格式化上下文)的理解
  • 原文地址:https://www.cnblogs.com/longjin2018/p/9868616.html
Copyright © 2011-2022 走看看