堆的应用(堆排序,TopK问题)
堆的应用
1)排序 堆排序
选择排序
既可以找到最大的放在最后
也可以找到最小的方最前
但是,堆排序不能找最小的放在最前
因为把最小数放在最前,会破坏掉堆的原来的顺序,除非重新建堆
1, 2,9,16,7,15,18,45,37,63,13
63,45,18,16,37,9,2,7,15,13,1
1,45,18,16,37,9,2,7,15,13, 63 再向下调整即可
堆排序:
排升序,建大堆排降序,建小堆原因:重新调整回根的成本更小,向下调整(O(logn))<建队O(n)
伪代码
int array[] int size;堆排序,排升序建大堆i=0;i的意义是被选出的最大的数的个数for(i<size-1){ //一次循环,找出一个最大的数放在最后Swap(&array[0],&array[size-1-i])//向下调整AdjustDown(array,size-1-i,0);}
建堆函数
向下调整函数
TopK问题
再海量数据中(n>>100*1000),找最大的k=10个数
建小堆
堆的应用(堆排序,TopK问题)相关推荐
- 堆排序时间复杂度_图解堆结构、堆排序及堆的应用
前言 这次我们介绍另一种时间复杂度为 O(nlogn) 的选择类排序方法叫做堆排序. 我将从以下几个方面介绍: 堆的结构 堆排序 优化的堆排序 原地堆排序 堆的应用 堆的结构 什么是堆?我给出了百度的 ...
- 【C】二叉树--顺序结构(详解堆的实现,topK排序、堆排)、和链式结构(链式结构的遍历、链式结构常见递归操作以及练习题)
本章我们将引入树的概念并详细介绍二叉树.我们会在介绍顺序二叉树基础上,进一步介绍堆以及堆的实现,并以此为依据详解topK排序.堆排等问题:然后我们会介绍链式二叉树的实现以及各种操作.最后,我们也会给出 ...
- 算法与数据体系课笔记之-6.堆结构与堆排序
目录 思维导图链接 6.堆结构与堆排序几个经典题目分析 总览 题1:堆结构 题目描述: 代码实现 题2:堆排序 题目描述: 代码实现 题3:2. 对几乎有序的数组进行排序 题目描述: 代码实现 思维导 ...
- < 数据结构 > 堆的应用 --- 堆排序和Topk问题
目录 1.堆排序 法一:自己写堆进行排序 时间复杂度分析 法二:直接对数组建堆 ①.向上调整建堆 ②.向下调整建堆 向上建堆和向下建堆熟优? 升序能否建小堆? 排序(建大堆) 2.TopK问题 何为T ...
- Java堆排序递归_大顶堆第二弹----堆排序(递归实现)
1 packagecom.datastruct;2 3 importjava.util.ArrayList;4 importjava.util.Arrays;5 6 public classBigHe ...
- java 小根堆 排序_堆排序(java实现)
堆排序就是用大根堆或者小根堆的节点都比左孩子 右孩子大(小)的特性 来构建有序序列. 名词解释: 大根堆:所有节点(n)都比他的左孩子(2n+1)与右孩子(2n+2)大的完全二叉树. 小根堆:所有节 ...
- 1.7_heap_sort_堆的向下调整堆排序
--- 二叉树的顺序存储方式 --- 父节点和左孩子节点的 index: i --> 2i + 1父节点和右孩子节点的 index: i --> 2i + 2孩子找父亲: (i - 1) ...
- 创建最大堆、最小堆、图解堆排序
优先级队列和堆 堆的存储方式 使用数组来保存二叉树,将二叉树的层序遍历结果按顺序放入数组中.这种方式只适合保存完全二叉树,因为非完全二叉树会浪费空间. 最大堆 满足任意节点的值都大于其子树中节点的值, ...
- 浅谈大根堆,小根堆,以及堆排序(python)实现
既然要说堆排序,那么必然要说说什么是大根堆,小根堆了. 大根堆: 若根节点存在左右子节点,那么根节点的值大于或等于左右子节点的值. 小根堆: 若根节点存在左右子节点,那么根节点的值小于或等于左右子节点 ...
- 堆的简单应用——TopK
1.海量数据top k问题 100亿个数中找出最大的前K个数,我们可以遍历K次找到,但是时间复杂度就很大为 O(KN);因此,我们可以用堆来实现,只需遍历一次,思路如下: 如果要找前K个最大的数,我们 ...
最新文章
- A Fully Featured Windows HTTP Wrapper in C++
- 防火墙简介(二)——firewalld防火墙
- [css] 请你解释下什么是浮动和它的工作原理是什么?同时浮动会引起什么问题?
- linux下printf语句执行时间,linux下printf中\n刷新缓冲区的疑问(已解决)
- 快速安装 Moodle 指南
- c++中的运算符异或^,与,或|
- 机器学习(6): 层次聚类 hierarchical clustering
- python现有两个磁盘文件a和b_有两个磁盘文件a和b,各存放一行字母,今要求把这两个文件中的信息合并...
- 微课|中学生可以这样学Python(8.4节):递归算法例题讲解3
- Lightroom Classic 教程,如何使用 Photoshop 和 Lightroom 优化照片?
- VS2015 LINK : warning LNK4068: 未指定 /MACHINE;默认设置为 X86
- datagrid 重载本地数据_DataGrid 的DataSource重新加载数据
- mysql 帮助文档使用
- Vue使用Upload上传图片报错:TypeError: Cannot create property 'xxx' on string 'xxxx'
- saas系统需要什么样的云服务器,SAAS系统和云服务器的区别
- 每个程序猿都有个黑客小宇宙,自敲代码的时候就爆发了一发不可收拾
- 华为机试真题 C++ 实现【叠积木】
- 华为mate30pro和华为p40pro有什么区别
- 机器学习(周志华) 第十章降维与度量学习
- 走进PEP8——代码规范
热门文章
- 教务管理及教材订购系统设计文档
- stixel world论文总结
- 20170907wdVBA_GetCellsContentToExcel
- 特性Attribute
- hdu 4857 逃生 拓扑排序
- oracle数据库swap占用率高,物理内存空余很多,swap被持续占用的问题
- 本地执行php查看内存占用,查看页面执行php占用内存情况
- mysql添加映射模块_iis7.5中让html与shtml一样支持include功能(添加模块映射)
- php设置排序,7种php基本排序实现方法
- 卷积神经网络语音识别_用于物体识别的3D卷积神经网络