zoukankan      html  css  js  c++  java
  • 【PTA】最小堆

    【PTA】最小堆

    最小堆,是一种经过排序的完全二叉树,其中任一非终端节点的数据值均不大于其左子节点和右子节点的值。

    也就是位于堆顶的元素是整棵完全二叉树中数据值最小的。

    操作

    将一棵完全二叉树转换成堆

    image-20211122074154340

    注意,在这种写法下,根节点的编号是0,对于任意一个结点,它的编号为x,其所对应的左儿子结点的编号为2*x+1,其所对应的右儿子结点编号为2*x+2

    其中外层循环i能够提取出每一个非叶子结点。

    而对于每一个非叶子结点我们是按照深度由大到小依类进行处理的。

    对于内层循环来讲,因为我们是要去将整个完全二叉树直接拿出来,并且将视野单独局限在一个由三个元素组成的小三角形中去,且要将这三个元素中最小的一个放置到这个小三角形的顶部。

    因而在第一步的时候我们可以先选择将两个儿子结点进行一个比较,但注意,位于底部右侧单独拎出来的那个小三角形,可能只具有一个儿子结点。

    因而我们需要先做一个判断,child+1<=N-1

    其次,如果A[child+1]<A[child],那么就对child进行一个加一操作,使得child代表A数组中元素最小的位置。

    而如果一旦A[child]比A[root]来得小的话,两者就会交换位置,也可以认为Tmp会下放到下一个三角形的顶部,而最终Tmp应该放到j停在的地方。

  • 相关阅读:
    Python中使用PyMySQL
    python实现通用json导入到mysql
    python实现通用excel导入到mysql
    java优化几个小步骤
    日志添加request-id
    Nginx优化
    tomcat8 性能优化参考
    excel空格处理
    spring boot swagger ui使用 nginx 部署后无法使用问题
    Swagger2多包扫描
  • 原文地址:https://www.cnblogs.com/BeautifulWater/p/15587057.html
Copyright © 2011-2022 走看看