码迷,mamicode.com
首页 > 其他好文 > 详细

topK

时间:2015-07-11 22:46:10      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:

最大K个数:

       当数据量小时:快排和堆排O(Nlog(N));部分排序(选择or交换)O(N*K)

                  快排加分治O(N*log(K));二分查找

当数据是整数且重复数比较多时:计数排序;若不是整数,则分区间计数。

当数据量大时:

1)小根堆:O(N*KlogK)

2)分治法:hash成M份数据,取每份数据的前K个。然后使用快排(分治)对M*K个数据求出K个数。【用MapReduce】

实际应用:当数据量大,且重复数据多时,求频率最高的K个

1)先用hash_map进行频率统计(得到一个数组)

2)然后用小根堆(对数组)取前K。

PS:若内存存储不了不重复的数据,则先将数据hash成M份文件。然后再对不同文件进行hash_map统计,然后去每份数据前K个,最后用快排(分治)对M*K个数据求出K个数【此处排序针对的是词频】

4、第K大的数(两个有序数组):分治法(短的数组的K/2为切割点)

topK

标签:

原文地址:http://www.cnblogs.com/xiangzhi/p/4639356.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!