数据结构-大文件排序

思路:

1. 32位无符号整数的范围是0-4294967295

2. 可以将这个数划分为64个空间,每个空间是67108864个数,例如,第0个区间(0-67108863)、第1个区间(67108864-134217728)、第i个区间(67108864i - 67108864(i+1)-1)

3. 第一次遍历可以将大文件的数据hash到64个小文件中

4. 针对每个小文件再次利用hash的思想,例如第0个区间,申请一个长度为67108864的bit map, 占用空间大概8M(8个bit为1B, 长度为67108864的bit类型的数组bitarr占用8M的空间)

5. 遍历每个小区间,如果遇到每个数,则对应区间位置+1

6. 遍历每个区间bit map,生成的数数据则为有序的数据

7. 将64个区间有序的数据进行合并,则为最后大文件有序的数据

# 生成二进制文件,分成64个区间,先把每个数据hash到对应小文件中
import os

base_dir = "./data/"
total_number = 2**32
interval_number = 64
every_interval_number = int(total_number/interval_number)
print(every_interval_number)
for i in range(int(total_number)):
    number = i // every_interval_number
    bin_data = "{0:b}".format(i)
    f = open(base_dir + str(int(number)) + '.txt', 'a')
    f.wr
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值