数据结构和算法unity3D技术分享Unity教程合集

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

2016-12-30  本文已影响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,谢谢!




上一篇 下一篇

猜你喜欢

热点阅读