zoukankan      html  css  js  c++  java
  • 二叉堆

    二叉堆是一个完全二叉树,分小根堆与大根堆

    小根堆:所有的父节点都比其子节点

    大根堆:所有父亲节点都比其子节点大(感觉自己在说废话)

    以下的操作都相对于小根堆

    上浮(向堆中加数,但保持小根堆的性质)操作:

    设:(这个节点的小标为i) 与自己的父亲节点进行比较,因为是完全二叉树,所以其父亲节点的下标为i/2,依次进行比较,如果大了就交换这两点的信息

    下沉(删除堆的跟节点,并保持堆的性质)操作:

    将堆顶元素切换成堆尾元素,再下沉该元素,与其子节点比较取最小值,交换两点信息,直到下沉到叶子节点或到对应位置时结束操作

    如何用堆反复求出一组数的中位数:

    用两个堆维护两组数,一个小根堆,一个大根堆,保证两堆中的元素个数的差值为1,当元素差值为2的时候就将大根堆的堆顶元素放进小根堆中(所有元素一开始都加进大根堆)

    然后遇到要输出中位数时,大根堆根节点即为中位数

    瑞瑞的木板&合并果子(其实是为了凑字数才写的)

    建立一个小根堆,当堆内元素大于等于2时,取最小的两个值合并(取根节点,删除,再取根节点),再将合并的值添回小根堆,反复操作(好像说完了)

    (看到袁某人放了两张图来解释,突然有点想效仿一下).....

    (算了,某“伟”人曾说过:博客自己看懂就行了,别搞的花里胡哨)

  • 相关阅读:
    pytest框架运用
    unitTest学习
    发送邮件
    python 连接远程服务器,修改时间
    Redis基础
    django 知识点扩展
    ACM 题目 1487: [蓝桥杯][算法提高VIP]不同单词个数统计
    Leetcode 面试题 08.01. 三步问题
    Leetocode 198. 打家劫舍
    Leetcode 121. 买卖股票的最佳时机
  • 原文地址:https://www.cnblogs.com/qyh2003/p/9108921.html
Copyright © 2011-2022 走看看