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

作者: 程序员大雄 | 来源:发表于2016-12-30 19:10 被阅读97次

    基本思路:

    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,谢谢!




    相关文章

      网友评论

        本文标题:算法:求N个数中前K个最大数

        本文链接:https://www.haomeiwen.com/subject/semuvttx.html