在大容量数据集中查找前N个数的算法

本文介绍了一种在大容量数据集中查找前N个最大数的算法,避免了对全部数据排序。算法核心是每次选取最大值并标记,避免重复选取,适用于整数和浮点数数据。程序示例展示了如何在10000个随机整数中找到前10个最大值。
摘要由CSDN通过智能技术生成

因工作原因,前阵子看了MTK中关于FM搜频的代码,其中记忆犹新的是一种比较实用的查找算法,我依据它的思想对这个算法做了小小的改动。

该算法的作用是在容量加大的数据集中查找前N个最大(也可以是最小,最大和最小不是算法的关键)数字,当然,这里的N一般比较小,如在100,000,000个数中查找前10个最大的数字。传统的算法是先对这100万个数排序,再取前10个,但对这么多的数字排序相当慢,由于只需取10个数,其余数字的排序实际上是无用的,因此需要一种新的算法。下面简述本文所说的算法思路:

该算法的思路是:每次在所有数据集中选出最大的数字,并将该数字设置一个标志位,已免下次遍历最大值的时候重复选中该数字。为避免查找算法的额外开销,设置标志位的方法比较重要,如果这些数据全部是整数,我们可以用位运算处理;如果是浮点数,我们可以先将这些数据放大,在一定精度范围内将其转化为整数,再使用位运算处理(当然,应该有其他的处理方式)。

写了这么多,个人觉得还是通过程序看算法容易得多。为获取大量不同数据源,我采用随机数生成了10000个整数,并在这些数字中选前10个数字。


/***************************************************
 * Name: Rapid Searching Arithmetic
 *
 * Author: zhouliang
 * Date:    2008-10-20
 * Email:   zhouliang531@163.com
 ************************

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值