堆(heap) 1. 堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质: 堆中某个节点的值总是不大于或不小于其父节点的值; 堆总是一棵完全二叉树。 根节点最大的堆叫做最大堆、大根堆或大顶堆 根节点最小的堆叫做最小堆、小根堆或小顶堆 常见的堆还有二叉堆、斐波那契堆等。 2. 堆是在程序运行时 ...
分类:
其他好文 时间:
2019-01-03 22:41:04
阅读次数:
209
class BinHeap: def __init__(self): self.heapList = [0] self.currentSize = 0 def percUp(self,i): while i // 2 > 0: if self.heapList[i] self.heapList... ...
分类:
编程语言 时间:
2018-12-24 11:16:59
阅读次数:
167
C++语言 基础算法 位运算 快速幂 模拟 枚举 递推 递归 分治 二分 三分 排序 归并排序 离散化 倍增 贪心 高精度 数据结构 前缀和 差分 栈 对顶栈 单调栈 队列 双端队列 循环队列 单调队列 ST表 链表 链式前向星 Hash表 二叉堆 Huffman树 并查集 路径压缩 按秩合并 扩展 ...
分类:
其他好文 时间:
2018-12-23 15:22:40
阅读次数:
465
二叉堆可以被看作是一个数组,也可以简单的看作是一个近似的完全二叉树,二叉堆有最大堆和最小堆,分别具有堆的性质:最大堆的某个结点的值最多与其父结点一样大,最小堆则是某个结点的值最多与其父结点一样小。所以最大堆中最大的结点永远是根结点,最小堆中最小的结点永远是根节点。 既然二叉堆是一种数据结构,就有其支 ...
分类:
其他好文 时间:
2018-12-22 17:28:49
阅读次数:
187
1.排序问题 现有一个含有N个数字的数组S,如何通过程序把这个数组变成有序的数组? 例如: 排序前:S:5,3,7,5,9,4,1,100,50 排序后:S:1,3,4,5,5,7,9,50,100 2.二叉堆(binary heaps) 进行堆排序前,需要先把数组排成二叉堆,故这里先介绍二叉堆。 ...
分类:
编程语言 时间:
2018-12-20 14:18:30
阅读次数:
158
为了准备面试,早就学习了二叉树,最近想撸一下红黑树。先把二叉树给总结一下吧。 1.二叉树定义 在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。 图中就是一个典 ...
分类:
编程语言 时间:
2018-12-05 12:11:09
阅读次数:
201
用二叉树实现堆: 完全二叉树: 用数组存储二叉堆: ...
分类:
其他好文 时间:
2018-12-02 12:25:59
阅读次数:
217
[TOC] 左偏树整理 整理自IOI2005 国家集训队论文 黄源河 的《左 偏 树 的 特 点 及 其 应 用》 引言 ps:优先队列的实现方式是二叉堆(完全二叉树,父亲的值大于左右两个儿子的值) 针对一些优先队列(二叉堆)合并问题的解法. 优先队列(二叉堆)可以支持三种操作 查询最大(小)值 ( ...
分类:
其他好文 时间:
2018-11-27 19:29:22
阅读次数:
168
1、(二叉)堆可以使用一个数组实现,在逻辑上,我们可以将这个数组实现成一个完全二叉树。因为完全二叉树的父节点和孩子节点之间存在关系。例子如下: 图a中就是一棵完全二叉树,并且这个完全二叉树是一个二叉最大堆(max堆)结构。因为该完全二叉树所有节点都满足堆序性。图b是该最大堆在内存上的存储形式,即以数 ...
分类:
编程语言 时间:
2018-11-23 16:09:17
阅读次数:
175
一. 二叉树基本概念 在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。二叉树是每个结点最多有两个子树的树结构。它有五种基本形态:二叉树可以是空集;根可以有空的 ...
分类:
其他好文 时间:
2018-11-22 00:20:57
阅读次数:
232