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停在的地方。

  • 相关阅读:
    pcs7 opc 连接问题
    nuget 多个程序引用同一个库时,当个这个库更新时,引用的程序都要跟新,否则会在运行时出错
    nuget update FileConflictAction
    a
    C#版本
    .NET Framework版本与CLR版本之间的关系
    c# 将一种数组类型转成另一种数组类型
    tfs 清除缓存,在需要时
    java枚举和仿枚举
    java反射的用法
  • 原文地址:https://www.cnblogs.com/BeautifulWater/p/15587057.html
Copyright © 2011-2022 走看看