标签:
最大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为切割点)
标签:
原文地址:http://www.cnblogs.com/xiangzhi/p/4639356.html