zoukankan      html  css  js  c++  java
  • 对顶堆

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

    大根堆Q1

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

    小根堆Q2q

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

    听不懂?没关系,接着看

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

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

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

    关于插入:

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

    关于调整:

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

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

    关于询问:

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

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

    下面简述对顶堆:

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

  • 相关阅读:
    Android消息机制解析
    ViewGroup事件分发机制解析
    Android Ptrace Inject
    Android GOT Hook
    Android Exception Hook
    Android Inline Hook
    esp8266 SDK开发之编译流程
    XML文件解析数据结构
    esp8266 SDK开发之GPIO中断
    esp8266 SDK开发之环境搭建
  • 原文地址:https://www.cnblogs.com/kamimxr/p/11492958.html
Copyright © 2011-2022 走看看