博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编程之美-2.5-寻找最大的K个数
阅读量:5813 次
发布时间:2019-06-18

本文共 557 字,大约阅读时间需要 1 分钟。

1. 简述

    简单的说就是有很多很多数值,多到内存放不下,要求选取其中最大的若干个数值。

2. 原理

    赤裸裸的TOP-K问题,比如求前100大的数值,维护一个100大小的最小堆,首先读100个元素,初始化这个最小堆,然后,每读取一个数值,根堆的数值比较一下,如果当前数值小于等于堆顶数值,那么继续遍历好了,如果当前数值大于堆顶数值,那么将对堆顶元素改为当前数值,然后更新一下堆,接着继续遍历就好了。另外也可以维护一个100个元素长度的有序数组,每次就是二分插入法。复杂度一般就是N*log100

    一般就是这样了,编程之美中的第五个解法也就是应用计数排序的方法,对于一般的数值型还是不错的,可以达到O(N)的复杂度,对于int,32位,4G个可能值,即512MB。

    书后面有五个扩展题目,现在想的不是很清楚,以后再说了。

3. 代码

    这个就省了。给一个更新最小堆的代码。

void UpdateMinHeap(int *a, int Len) {
int i= 0; while(i < Len) {
int left = 2*i+1; int right = 2*i+2; int next = -1; if(left < Len && a[left]

4. 参考

    编程之美,2.5节,寻找最大的K个数。

转载地址:http://dytbx.baihongyu.com/

你可能感兴趣的文章
Oracle性能优化--DBMS_PROFILER
查看>>
uva-317-找规律
查看>>
Event事件的兼容性(转)
查看>>
我的2014-相对奢侈的生活
查看>>
zoj 2412 dfs 求连通分量的个数
查看>>
Java设计模式
查看>>
一文读懂 AOP | 你想要的最全面 AOP 方法探讨
查看>>
ndk制作so库,ndk-build不是内部或外部命令。。。的错误
查看>>
Spring Cloud 微服务分布式链路跟踪 Sleuth 与 Zipkin
查看>>
ORM数据库框架 SQLite 常用数据库框架比较 MD
查看>>
STL_算法_依据第n个元素排序(nth_element)
查看>>
BNU 34990 Justice String (hash+二分求LCP)
查看>>
华为OJ 名字美丽度
查看>>
Android 带清除功能的输入框控件EditTextWithDel
查看>>
微信公众号与APP微信第三方登录账号打通
查看>>
onchange()事件的应用
查看>>
PowerPoint 2010 设置演讲者模式
查看>>
net 和Mono 构建的HTTP服务框架
查看>>
Windows 下最佳的 C++ 开发的 IDE 是什么?
查看>>
软件工程师成长为架构师必备的十项技能
查看>>