算法导论随笔(二) 手动建堆 作为stl选手,对于手写堆接触较少,不过熟悉建堆的过程还是有不少收获的。 堆的载体:一个长度为n的数组 基本操作:维持某节点的堆性质 void heapify(int o) //维护i号节点的堆性质 { while (1) { int ls = o << 1; int ...
分类:
编程语言 时间:
2021-01-15 12:10:01
阅读次数:
0
#走进堆 堆分为大根堆和小根堆,大根堆堆顶元素最大,越往下元素越小,小根堆相反,堆顶元素最小,越往下元素越大 ##1.定义 手写堆是什么,表示从来没用过,要写堆当然要用我STL的优先队列啦 priority_queue<int> q;//默认的优先队列是大根堆 priority_queue<int, ...
分类:
其他好文 时间:
2020-06-27 20:28:22
阅读次数:
80
手写堆 算法思想 堆是一颗完全二叉树 STL里的堆就是优先队列priority_queue 用一维数组存储 下标一定是从1开始,避免0的左儿子2x还是0的冲突 核心操作:down(x)下移节点 up(x)上移节点 插入一个数 heap[++size] = x; up(size); 求集合当中的最小值 ...
分类:
其他好文 时间:
2020-04-29 12:33:48
阅读次数:
52
1 for(int i=1;i<=n;i++) 2 cin>>h[i]; 3 size=n; 4 for(int i=n/2;i;i--) 5 down(i); 6 //建堆,根据完全二叉树的性质,n/2后的都是叶子结点,只需要把所有的根结点从后往前down一遍就完成了堆的建立 7 8 9 //小根 ...
分类:
其他好文 时间:
2020-03-15 10:09:43
阅读次数:
70
这个用优先队列就可以了。 在这里补充一点优先队列和队列的知识。 优先队列 大根堆:从大到小排列。小根堆:从小到大排列。优先队列就是堆,也可以自己手写堆。// 小根堆的写法priority_queue<int,vector<int>,greater<int> > vis;// 大根堆的写法priori ...
分类:
其他好文 时间:
2020-02-16 16:09:34
阅读次数:
70
如题 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<queue> 5 #define rep(i,a,n) for(register int i = a;i <= n;++i) 6 using names ...
分类:
其他好文 时间:
2019-11-07 23:44:39
阅读次数:
106
1. 手写一个单例模式 2. 手写一个生产者消费者模式 3. 手写一个LRU算法的实现; 4. 手写快排 5. 手写堆排 6. 手写树的遍历(先序、中序、后序、层序) 7. 手写一个二分查找 #. 剑指OFFER #. LeetCode ...
分类:
其他好文 时间:
2019-09-11 12:06:41
阅读次数:
104
(搭配手写swap) 系统自带的常数很大。 il void swap(int &x,int &y){x^=y^=x^=y;} ...
分类:
其他好文 时间:
2019-08-16 22:30:28
阅读次数:
95
概述 堆是一颗完全二叉树。分为大根堆(父节点>=所有的子节点)和小根堆(父节点<=所有的子节点)。 插入、删除堆顶都是O(logN),查询最值是O(1)。 完全二叉树(Complete Binary Tree) 若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数, ...
分类:
其他好文 时间:
2019-08-11 16:57:08
阅读次数:
97
STL大法好! 当然,是不可能得永生的,但它可以延长你的在役时间 最近总结了一些STL的神奇用法,C++的STL和作弊器一样,简直kongbu...... 所以说,我们一起来看看STL的用法吧! 目录: 当然,这只会是一个大致的讲解,不会非常详细 vector vector,就是不定长数组,内部基于 ...
分类:
其他好文 时间:
2019-01-25 17:48:54
阅读次数:
205