zoukankan      html  css  js  c++  java
  • 【模板】堆

     堆是一种特殊的完全二叉树。以小根堆为例,这种完全二叉树有一个特点,就是它的父节点都比子节点小。符合这样特点的二叉树,我们也称为最小堆。

     反之,如果所有父节点都比子节点要大,这样的完全二叉树称为大根堆,或最大堆。

     (若是最小堆,则最小的数在堆顶/树根。)


    按一般意义来讲,一个堆的父节点的优先级都比子节点高。

    堆有两种基本的写法


    1.手写堆
    ```cpp #include #include #include #include #define leftson (cur<<1) #define rightson (cur<<1|1) #define father (cur>>1) #define int long long #define MAXN 1000000+10 int n=0,m; int heap[MAXN]; namespace self { #define int long long void swap(int h[],int x,int y) { int t; t=h[x]; h[x]=h[y]; h[y]=t; return; } using namespace self; void siftdown(int h[],int i) { int t; bool flag=0; while (i*2<=n && flag==0) { if (h[i]>h[i*2]) t=i*2; else t=i; if (i*2+1<=n) { if(h[t]>h[i*2+1]) t=i*2+1; } if (t!=i) { swap(heap,t,i); i=t; } else flag=1; } return; } } using namespace self; void down(int cur) { int t; bool flag=0; while (leftson<=n&&(!flag)) { if (heap[cur]>heap[leftson]) { t=leftson; } else t=cur; if (rightson<=n) { if (heap[t] 2.STL 堆:优先队列
     队列是一种先进先出(FIFO)式的数据结构。优先队列与其不同的地方是,优先队列存储的时候,会将(定义的)优先级较大的元素放在较小的元素之前。也就是说优先级最大的元素放在队头。 那么这里就和堆有了共同点:优先级大的放在队前/堆高层。 大根堆的定义: queue< int >q;
    小根堆的定义: priority_queue< int,vector< int >,greater< int > >q;
    一个优先队列的操作:
    ![qwq](https://img2018.cnblogs.com/blog/1502584/201903/1502584-20190315131434620-2042581491.png)
    ### 小根堆基本操作代码 ```cpp #include #include #include #include #include using namespace std; priority_queue,greater >q; int main() { int n; scanf("%d",&n); int x; while(n--) { scanf("%d",&x); if (x==1)//命令1 在堆中加入一个数 { scanf("%d",&x); q.push(x); continue; } if (x==2)//命令2 输出当前序列中最小数 { printf("%d ",q.top()); continue; } if (x==3)//命令3 删除当前序列中最小数 q.pop(); } return 0; } ```
  • 相关阅读:
    Deep Reinforcement Learning: Pong from Pixels
    [TensorFlow] Creating Custom Estimators in TensorFlow
    [TensorFlow] Introducing TensorFlow Feature Columns
    [TensorFlow] Introduction to TensorFlow Datasets and Estimators
    [Golang] GoConvey测试框架使用指南
    [机器学习]一个例子完美解释朴素贝叶斯分类器
    [深度学习]理解RNN, GRU, LSTM 网络
    [深度学习]CNN--卷积神经网络中用1*1 卷积有什么作用
    Tensorflow学习笔记(2):tf.nn.dropout 与 tf.layers.dropout
    TensorFlow学习笔记(1):variable与get_variable, name_scope()和variable_scope()
  • 原文地址:https://www.cnblogs.com/Kan-kiz/p/10536416.html
Copyright © 2011-2022 走看看