算法:求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)



算法步骤如下:


算法:求N个数中前K个最大数_第1张图片

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




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






你可能感兴趣的:(算法:求N个数中前K个最大数)