找出最大的前K个数
来源:互联网 发布:男生淘宝网名昵称大全 编辑:程序博客网 时间:2024/05/21 17:34
是编程之美里的一个问题,
找出一个列表中的最大的前k个数,最先想到,
也是最简单的思路是做一个K长度的盒子,然后一个一个数据往里放,有大的来了就把小的剔除掉。
但是这样的做法会导致盒子内部要是有序的。(不然找不出谁是最小的,比较和剔除就不能做了)
这个做法的复杂度是O(N*K)
书里面讲了一种比较好的办法,就是类似于快速排序,做一个切割,看够不够。然后递归出结果。
这样的复杂度就是O(N*logK)了
接下去的一个思路是来自堆排序,看一下把一个数组整理成大顶堆的代码
所以说,如果我们定义一个长度是K的小顶堆,让他盛满。
来一个数,比较顶和数字的大小,如果大于顶,就把顶剔除,放入新数字后整理堆。
直到整个数组被遍历一遍。这样的好处是整个数组只要遍历一次。
如果说对于一个Gb的数据找出前20个,这是比较好的办法。
但是貌似在数组里实现堆要判断好多越界的情况,于是有了下面一堆代码……
写完这个程序的时候,我发现heap建立的时候,可以从下到上建立,就是下标,除以二直到0.
而追加一个数据到顶以后就要从上往下走了。
所以上面有两段不同的代码。iniheap和rTidyHeap
- 找出最大的前K个数
- 100w个数中找出最大的前k个数
- 100w个数中找出最大的前K个数
- 【海量数据处理】N个数中找出最大的前K个数
- TopK问题--100W个数种找出其中最大的前K个数;
- Topk找出最大的K个数
- 100万个数中找出最大的前100个数
- N个数中找出最大的K个数
- N个数里面找出最大的k个数
- 100w个数中找出最大的k个数
- 找出无序数组中最小的前k个数
- 找出无序数组中最小的前k个数
- 找出一堆数中最小的前K个数
- 找出一堆数中最小的前K个数
- 从n个数中找出前m个最大的
- 找出N个整数中最大的K个数
- 找出一堆数据中最大或者最小的K个数
- 找出N个整数中最大的K个数
- jQuery去掉A链接虚线框
- oracle keep(first/last)
- char*转换CString 、CString转换为char *、连接char* 串
- 利用REST配置GeoServer
- 汉字字符串长度判断
- 找出最大的前K个数
- 劳动合同法中对竞业限制的规定
- AS2 → AS3: LoadVars AS3 Equivalent
- 应用于客户端的性能测试指标
- C# 中的委托和事件(http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx)
- 继续努力
- 利用GPU进行高性能数据并行计算《程序员》2008年第4期
- cisco 路由器:ADSL拨号的设置
- 使用jQuery的load(url)加载网页的替代方案--不用考虑编码的问题