美文网首页
寻找最大的K个数的算法笔记

寻找最大的K个数的算法笔记

作者: TangFly | 来源:发表于2020-05-01 13:34 被阅读0次

    前言:算法题中,有一道经典题,那就是寻一堆数中最大的K个数。在此,我决定总结一下,做做笔记。

    1.应用场景有什么?

    通常,海量数据搜索最匹配的K个记录,数据库记录中获取最符合某个特性的K个记录,文件中获取出现文字最多的K篇文章,以此等等,我们最终都是在对建立的数据模型的求最大K个数的求解。

    2.解法大全

    2.1全排序取K数法:这个方法就是用快排或其它排序方法。将所有数都排序好,然后取出最前面或最后的K个数。时间复杂度O(nlgn+k),适用范围是数据量不大时。

    2.2快排分治法:采用快排方式,取一个基准数B,将整个数据集合分成2部分Sa,Sb。Sa集合中所有数大于B, Sb集合中所有数小于B。此时,如果集合Sa个数小于K,那么问题就变为在Sb中求出K-n(Sa)个最大数的问题;而如果集合Sa个数大于K,那么就变成了再在Sa中求最大K个数的问题。通过不断减少数据规模,从而达到分治目的。这种算法时间复杂度和第一种一样,也只适用于小数据量场景。

    2.3最小堆方法:取K个数构成最小堆,然后扫描所有后续数据,与最小堆的堆顶数比较,如果小于,则跳过,如果大于,则替换该堆顶元素为比较的数,然后调整堆为新的最小堆。此算法时间复杂度为O(n*lgk)。当n很大,K有限大时,这个方法是最好的。因为不需要把所有数据加载到内存,这种算法能处理海量数据规模。

    3.结论:

    采用那种算法,取决于数据规模n和K的大小。对于海量数据,解法3最优。

    相关文章

      网友评论

          本文标题:寻找最大的K个数的算法笔记

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