我正在处理一个大数据问题:我有大量的数组(~1M)
分布在大量文件(~1k)
中。对数据进行组织,以使i
文件包含所有数组的i
条目。如果算法的总成本由我需要打开的文件数决定(假设一次只能打开一个文件),是否有策略同时对所有数组进行就地排序以便最大限度地降低总体成本?
请注意,数据对于存储在内存中的所有内容来说都太大了,但是在内存~10
(i.e. 10x1M values).
条目应该没有问题
答案 0 :(得分:2)
这个问题缺乏信息。没有提及数组是否已经自行排序。我将回答假设数组本身没有排序。
组织数据,以便第i个文件包含第i个条目 所有阵列。
由此,我可以假设 -
file i
------------
arr1[i]
arr2[i]
arr3[i]
...
...
arrN[i] # N = ~1M
您提到数组的数量为1M
和文件数1K
,因此根据此数据,不会包含多于1K
个元素,否则将需要更多文件。
每个文件都包含1M
个元素。
....但是从所有数组中存储~10个条目应该没有问题 在记忆中(即10x1M值)。
因此,我们应该能够在内存中加载文件的所有元素,因为它不会超过1M
个元素。
然后将每个文件加载到内存中并对文件的元素进行排序。
然后使用minheap应用K-Way Merge Algorithms对包含已排序元素的1K
文件进行排序。当c * 1M
为小常数(c
)时,此步骤会将c < 3
元素加载到内存中。
如果您在理解K-way合并方面遇到任何问题,请告诉我。
希望它有所帮助!