十亿数据中求最大一百个数字

本文介绍了一种用于大数据环境中快速查找最大数值的方法。通过位运算和数组存储的方式,该算法能够在有限的空间内高效地找到数据集中的前几个最大值。示例代码展示了如何使用Java实现这一算法,并限制了内存使用,适用于大规模数据处理场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Stackoverflow看到的问题,真是讨论的热火朝天。

前期看过相关大数据处理的一些文章,有新的处理方式,于是借此机会实现了一份代码。

但是Stackoverflow的Reputation过低,还无法回答问题。在此先保存下来,后期再回复。

package org.example.bigdata;

public class TopNumber {
	public static void main(String[] args) {
		final int input[] = {2389,8922,3382,6982,5231,8934
							,4322,7922,6892,5224,4829,3829
							,6892,6872,4682,6723,8923,3492};
		//One int(4 bytes) hold 32 = 2^5 value,
		//About 4 * 125M Bytes
		//int sort[] = new int[1 << (32 - 5)];
		//Allocate small array for local test
		int sort[] = new int[1000];
		//Set all bit to 0
		for(int index = 0; index < sort.length; index++){
			sort[index] &= 1 ^ 1;
		}
		for(int number : input){
			sort[number >>> 5] |= (1 << (number % 32));
		}
		int topNum = 0;
		outer:
		for(int index = sort.length - 1; index >= 0; index--){
			if((1 ^ 1) != sort[index]){
				for(int bit = 31; bit >= 0; bit--){
					if(0 != (sort[index] & (1 << bit))){
						System.out.println((index << 5) + bit);
						topNum++;
						if(topNum >= 3){
							break outer;
						}
					}
				}
			}
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值