海量数据的排序和查找

本文介绍了在处理海量数据时,如何利用位图法进行排序,特别是在内存有限的情况下。此外,讨论了堆排序法在找出大量数据中前n个最大或最小值的优势。最后,探讨了分治策略在2G内存单台机器上对10G数据排序的可行性。位图法利用每位代表一个数字,堆排序则适合找出最大值,分治策略通过切分和合并数据进行排序。

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

位图法
使用场景举例:对2G的数据量进行排序,这是基本要求。
数据:1、每个数据不大于8亿;2、数据类型位int;3、每个数据最多重复一次。
内存:最多用200M的内存进行操作。
首先对占用的内存进行判断,每个数据不大于8亿,那么8亿是一个什么概念呢。
1 byte = 8 bit(位)
1024 byte = 81024 bit = 1k
1024 k = 8
1024*1024 bit = 1M = 8388608 bit

也就是1M=8388608位
而位图法的基本思想就是利用一位代表一个数字,例如3位上为1,则说明3在数据中出现过,若为0,则说明3在数据中没有出现过。所以当题目中出现每个数据最多重复一次这个条件时,我们可以考虑使用位图法来进行大数据排序。比如说有一个同等长度的int数组,原来一个int元素用来表示一个数据,现在利用int元素的每一位,它可以表示32个元素。
那么假如使用位图法来进行这题的排序,内存占用多少呢。由题目知道每个数据不大于8亿,那么我们就需要8亿位,占用800000000/8388608=95M的空间,满足最多使用200M内存进行操作的条件,这也是这题能够使用位图法来解决的一个基础。
关键代码:
在这里插入图片描述
建立一个足够大的Bit数组当做hash表,以bit数组的下标来表示一个整数,以bit位中的0或1来表示这个整数是否在这个数组中存在,适用于无重复原始数据的搜索,原来的每个整数需要4byte空间变为1Bit,空间压缩率为32倍。
堆排序法
堆排序是4种平均时间复杂度为nlogn的排序方法之一,其优点在于当求M个数中的前n个最大数,和最小数的时候性能极好。所以当从海量数据中要找出前m个最大值或最小值,而对其他值没有要求时,使用堆排序法效果很好。
使用场景:从1亿个整数里找出100个最大的数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值