数据结构-大文件排序

思路:

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

你可能感兴趣的:(数据结构,数据结构)