算法:求N个数中前K个最大数

基本思路:

1. 用最多K个元素的最大堆max_heap记录最终结果

2. 最大堆的max_heap的所有叶子节点,组成最小堆组成最小堆min_heap

3. 该思路的提出,受启发于逆波兰式算法,双数据结构解决表达式计算问题

比较优势:

1. 众所周知,用快速排序的思想,也可以解出N个数中的前K个最大数,但该算法的好坏,取决于PIVOIT点,对于该点的取舍,目前已知最好策略是取N个数中的随机某个元素。所以需要的轮次比较多。本算法一轮,就能找出最大K个元素,复杂度O(N)(视K为常数的情况下)。

2. 该算法可以对付N超级大(亿级别),K相对较小的情况,因为内存复杂度只有O(K)



算法步骤如下:


很容易看到,该算法的时间复杂度为O( Nlgk), 空音复杂度为O(K), 特别适用于K相对较小。




对该算法有不解的,可以联系微信:151305546,谢谢!






最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 排序算法说明 (1)排序的定义:对一序列对象根据某个关键字进行排序; 输入:n个数:a1,a2,a3,…,an 输...
    code武阅读 3,892评论 0 0
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
    依依玖玥阅读 5,031评论 0 2
  • 排序算法基础 排序算法,是一种能将一串数据按照特定的排序方式进行排列的一种算法,一个排序算法的好坏,主要从时间复杂...
    jackyshan阅读 9,625评论 3 11
  • 概述 因为健忘,加上对各种排序算法理解不深刻,过段时间面对排序就蒙了。所以决定对我们常见的这几种排序算法进行统一总...
    清风之心阅读 4,028评论 0 1
  • 1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不...
    曲终人散Li阅读 8,645评论 0 19

友情链接更多精彩内容