一、 优先队列的概述 在前面的数据结构(三):线性表-栈,队列中记录到,队列是先进先出的结构,元素在队列末端添加,在队列前头删除,若使用该队列的数据结构,则当要找出队列中的最大最小值时,需要遍历队列 对每个元素做比较后得出,这样在实际的生产应用中效率是很低的,这时就需要有一种队列,能快捷的获取队列中 ...
分类:
其他好文 时间:
2020-12-03 12:22:31
阅读次数:
5
题目:https://pintia.cn/problem-sets/1268384564738605056/problems/1278908289143574528 将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。 输入格式: 每组测试第1行包含 ...
分类:
其他好文 时间:
2020-09-17 15:45:45
阅读次数:
22
一、前言 二叉堆是一个特殊的堆,其本质是一棵完全二叉树,可用数组来存储数据,如果根节点在数组的下标位置为1,那么当前节点n的左子节点为2n,有子节点在数组中的下标位置为2n+1。二叉堆类型分为最大堆(大顶堆)和最小堆(小顶堆),其分类是根据父节点和子节点的大小来决定的,在二叉堆中父节点总是大于或等于 ...
分类:
编程语言 时间:
2020-09-16 12:12:33
阅读次数:
31
1.堆 堆的性质 大顶堆:每个节点的值都大于或者等于它的左右子节点的值(arr[i] >= arr[2i + 1] && arr[i] >= arr[2i + 2])。 小顶堆:每个节点的值都小于或者等于它的左右子节点的值(arr[i] <= arr[2i + 1] && arr[i] <= arr ...
分类:
其他好文 时间:
2020-07-27 23:44:27
阅读次数:
65
大顶堆和小顶堆 相关介绍可参看:北京大学空地学院数据结构与算法 第六章 6.8.2.2 小节 代码实现如下 class Heap: """二叉堆的实现 小顶堆""" def __init__(self): self.heapList = [0] # 默认一个 0 做占位,使得根节点的索引在 1 上 ...
分类:
编程语言 时间:
2020-07-27 23:32:44
阅读次数:
75
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <vector> 5 using namespace std; 6 const int SIZE = 1e6; 7 int heap[SIZE], ...
分类:
编程语言 时间:
2020-07-25 23:58:20
阅读次数:
91
###问题描述 在大规模数据处理中,经常会遇到的一类问题就是在海量数据中找出出现频率最高的前K个数,或者从海量数据中找出最大的前K个数,这类问题通常被称为top K问题。 ###问题解答 针对top K类问题,通常比较好的方案是分治+Trie树/hash+小顶堆,即先将数据集按照hash方法分解成多 ...
分类:
其他好文 时间:
2020-07-05 21:29:51
阅读次数:
70
农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L?i??个长度单位,于是他购买了一条很长的、能锯成N块的木头,即该木头的长度是L?i??的总和。但是农夫自己没有锯子,请人锯木的酬金跟这段木头的长度成正比。为简单起见,不妨就设酬金等于所锯木头的长度。例如,要将长度为20的 ...
分类:
其他好文 时间:
2020-06-27 15:53:39
阅读次数:
66
记录一下自己理解的堆和堆排序吧。 堆是一种类似于完全二叉树的树形结构,对于二叉树中所有非叶子节点,如果根节点的值严格大于其两个儿子的值,则称为 大顶堆,反之称为小顶堆。 堆排序的一般步骤: 首先利用已有的数据构造一个堆,大顶堆增序,小顶堆降序。 将堆顶的元素与堆末元素交换,接着重新调整除去堆末元素的 ...
分类:
编程语言 时间:
2020-06-22 20:59:19
阅读次数:
91
需要抓紧时间的一周。 Algorithm: 215:Kth Largest Element in an Array (Medium) 这道题求第 k 大元素,类似于 top k,可以使用堆 heap,这里需要注意虽然逻辑上需要一个大小为 k 的小顶堆,但是实际上有个技巧是让它可以放下 k + 1 个 ...
分类:
其他好文 时间:
2020-06-06 12:45:10
阅读次数:
51