问题:现在有n个数,设计算法得到前k大的数。(k<n)
解决思路:
1. 排序后切片     O(nlog n)
2. 排序LowB三人组 O(kn)
3. 堆排序思路     O(nlog k)
堆排序解决:
1. 取列表前k个元素建立一个小根堆,堆顶就是目前第k大的数
2. 依次向后遍历原列表,对于列表中的元素,如果小于堆顶,则忽略该元素;
如果大于 堆顶,则将堆顶更换为该元素,并且对堆顶进行一次堆调整;
3. 遍历列表所有元素后,倒序弹出堆顶
def small_sift(li,low,high):i = low j = 2*i + 1tmp = li[low]while j <= high:if j + 1 <= high and li[j+1] < li[j]: # 改成小根堆的形式,j = j + 1if li[j] < tmp:    # 改成小根堆的形式,li[i] = li[j]i = jj = 2*i + 1else:li[i] = tmpbreakelse:li[i] = tmpdef topk(li,k):heap = li[0:k]# 1.建堆for i in range((k-2)//2,-1,-1):small_sift(heap,i,k-1)        # 2.遍历for i in range(k,len(li)-1):if li[i] > heap[0]:heap[0] = li[i]small_sift(heap,0,k-1)# 3.出数for i in range(k-1,-1,-1):heap[0],heap[i] = heap[i],heap[0]small_sift(heap,0,i-1)return heap
import random
li = list(range(100))
random.shuffle(li)
print(topk(li, 10))

堆排序——top k问题相关推荐

  1. 用scala语言实现并行堆排序(top k)

    因为项目需要对大量数据进行排序计算top k,开始了解并行计算框架,接触了spark,spark都是用scala写的,所以为了了解spark,恶补了一阵scala语言. 这是一种非常简练的函数式语言, ...

  2. 二叉树(三)——堆排序优化、TOP K问题

    一.堆排序优化      上一讲采用先独立建小堆,再把数组元素全部放入小堆中,最后从小堆弹出所有元素实现堆排序,固然达到了O(NlogN)的时间复杂度,但空间复杂度为O(N),值得优化. 优化堆排序的 ...

  3. 【LeetCode 剑指offer刷题】查找与排序题12:Top K Frequent Elements

    [LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) Top K Frequent Elements Given a non-empty array of integer ...

  4. 海量数据中找top K专题

    1. 10亿个数中找出最大的1000个数 这种题目就是分治+堆排序. 为啥分治?因为数太多了,全部加载进内存不够用,所以分配到多台机器中,或者多个文件中,但具体分成多少份,视情况而定,只要保证满足内存 ...

  5. 海量数据处理的 Top K相关问题

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 Top-k的最小堆解决方法 问题描述:有N(N>>10000)个整数,求出其中的前K个最大的数.(称作Top k或者Top ...

  6. 精确查找top k和非精确查找top k

    信息检索里面经典问题. 精确top K 检索及其加速办法 •方法一:快速计算余弦 • 方法二:堆排序法N中选K • 方法三:提前终止计算 精确top K检索加速方法一: 快速计算余弦 • 检索排序就是 ...

  7. 最小堆解决Top K问题

    问题描述: 有一组数据n个,要求取出这组数据中最大的K个值. 对于这个问题,解法有很多中.比如排序及部分排序,不过效率最高的要数最小堆,它的时间复杂度为O(nlogk). 解题思路: 取出数组的前n个 ...

  8. 最大堆、最小堆Java实现,解决TOP K问题

    一.基础知识 1.1 什么是最大(小)堆 最大堆,最小堆类似,以下以最小堆为例进行讲解. 最小堆是满足以下条件的数据结构: 它是一棵完全二叉树 所有父节点的值小于或等于两个子节点的值 1.2 什么是完 ...

  9. 求 top k有哪些方法

    大家好, 此文章分享求top k有哪些方法 求 topk, 理解起来不难,就是很多元素中,找出前K个最大或者最小 假设我们求最大K元素 思路有以下几种: 1. 全局排序 所有元素加载到内存,来个全局排 ...

最新文章

  1. 骆驼iptv_骆驼路线的主/从故障转移
  2. J2ME手游开发日记
  3. 好程序员web前端分享MVVM框架Vue实现原理
  4. java绘画imo,搞死帮忙看下这个:需要为class interface或enum imort java.ut
  5. centOS安装oracleDB,静默安装DBCA的时候,报错
  6. 集群介绍 keepalived介绍 用keepalived配置高可用集群
  7. chrome redhat 下载源_RedHat 7.0 Chrome浏览器 安装
  8. 想自学PLC编程该按什么步骤来?
  9. springMVC+mybatis
  10. 利用pyecharts绘制雷达图的案例(含参数解释)
  11. PHP预处理器的配置文件名为,2)PHP预处理器配置文件名是什么?
  12. XtraReport通过动态设置打印模板进行标签打印
  13. SurfaceView和View最本质的区别
  14. XENOGEARS,延续万年的的永恒之爱(引)
  15. 力扣276 周赛 2139. 得到目标值的最少行动次数
  16. PL/SQL编程---流程控制语句
  17. 记一次虚拟机失联的奇葩经历
  18. python 波动率_用python计算投资组合方差和波动率
  19. eCPRI带宽与CPRI带宽需求为什么相差4倍?
  20. python小实例一:简单爬虫

热门文章

  1. Jquery乱码终极解决方案
  2. Unix 下获得 root权限
  3. Leetcode106 由中序序列和后序序列构建二叉树
  4. keras 中 reuse 问题
  5. Exp5 MSF基础应用 ——20164316张子遥
  6. js字符串常用方法详解
  7. TestNG 框架的运用
  8. VS2017开发.net core 时默认发布路径文件夹多个BPC
  9. 【转载】三角形测试用例
  10. C#资源,自定义控件等