• 对顶堆


    这个玩意是可以动态维护第k大的值,每次操作logn。

    大根堆Q1

    q1:维护集合中较小值的部分的最大值。

    小根堆Q2q

    q2:维护集合中较大值的部分的最小值。

    听不懂?没关系,接着看

    为了方便,我们用鸡和凤来比喻这两个堆

    换句话来说,以鸡头凤尾来比喻这两个堆,q1的堆顶就是鸡头,q2的堆顶就是凤尾;

    由此可见,q2.top>q1.top;

    关于插入:

         如果新来的小崽比鸡头还厉害,那么它就进入凤堆(否则它会对上天的选择不满);否则进入鸡堆;可以发现,这样操作并不破坏原有的特性;

    关于调整:

         有时小鸡的数量比凤的数量要小得多,那么为了让凤得到优越感,她们会将凤群中的弱者打回小鸡(别问我怎么打的),也就是把凤堆的尾巴改成鸡头,直到两者的数量处于平衡态(目前你不需要理解什么是平衡态,下面会说到);

       如果反之,那么小鸡中的佼佼者便会经历涅槃成凤,成为凤尾。

    关于询问:

         如果问第k大的值,我们发现,如果凤堆中一共有k只凤,那么凤尾(堆顶)便是答案,那么之前所说的调整中的平衡态便是维持凤堆中的凤的数量等于k;

    看懂凤鸡之间的关系了吗?如果看懂了那么你就会对顶堆了;

    下面简述对顶堆:

    维护小根堆的数量是k,通过和大根堆之间的元素转移来维护这个性质;

  • 相关阅读:
    适用于 Laravel 的内部收单模块
    适用于 Laravel API 的签名看守器
    适用于 Laravel 的百度搜索推送
    适用于Yii2的千万级数据秒分页
    PostMan 代理的一个大坑
    PHP 各种金融利息的计算方法
    软件工程之UML建模课
    Windows 通过 cmd 得到域名的dns
    在windows下,通过git-bash里的ssh,远程登陆虚拟机里的linux
    Java常见缩写
  • 原文地址:https://www.cnblogs.com/kamimxr/p/11492958.html
Copyright © 2020-2023  润新知