Algorithm 如何对30gb文件进行排序,重复使用1-1000个数字
我有30 gb的文件,这是只有1-1000个数字重复。我想知道如何对该文件进行排序,您需要首先将该文件加载到内存中 我已经通过其他链接,所以,但不同意的一点排序,它多块的文件,并保持在临时文件。正如我所相信的,在进程结束时,我将剩下两个大文件(每个15 GB)进行排序。我无法加载每个文件以进行合并和排序Algorithm 如何对30gb文件进行排序,重复使用1-1000个数字,algorithm,sorting,mergesort,large-files,Algorithm,Sorting,Mergesort,Large Files,我有30 gb的文件,这是只有1-1000个数字重复。我想知道如何对该文件进行排序,您需要首先将该文件加载到内存中 我已经通过其他链接,所以,但不同意的一点排序,它多块的文件,并保持在临时文件。正如我所相信的,在进程结束时,我将剩下两个大文件(每个15 GB)进行排序。我无法加载每个文件以进行合并和排序 有什么建议吗?如果这些值都在1到1000的范围内,您可以使用的简单版本执行此操作 创建一个计数器[1000]数组(如果您的数组是 从零开始)全部初始化为零 从文件增量计数器[n]读取值n时,读
有什么建议吗?如果这些值都在1到1000的范围内,您可以使用的简单版本执行此操作
- 创建一个
数组(如果您的数组是 从零开始)全部初始化为零计数器[1000]
- 从文件增量
读取值计数器[n]
时,读取文件n
- 现在您知道了每个值在输入文件中出现的次数
- 循环通过
,对于每个索引计数器
写入n
以输出计数器[n]
的副本。例如,如果n
,则写入计数器[100]==5
以输出100
次5
您不需要将整个文件保存在内存中。您只需要计算每个值在文件中出现的次数。这些信息足以创建原始文件的已排序版本 如果这些值都在1..1000范围内,您可以使用的简单版本执行此操作
- 创建一个
数组(如果您的数组是 从零开始)全部初始化为零计数器[1000]
- 从文件增量
读取值计数器[n]
时,读取文件n
- 现在您知道了每个值在输入文件中出现的次数
- 循环通过
,对于每个索引计数器
写入n
以输出计数器[n]
的副本。例如,如果n
,则写入计数器[100]==5
以输出100
次5
您不需要将整个文件保存在内存中。您只需要计算每个值在文件中出现的次数。这些信息足以创建原始文件的已排序版本 是否需要使用合并排序?这可以通过计数排序在线性时间内完成。@高炉,没有使用合并排序的要求。您需要使用合并排序吗?这可以通过计数排序在线性时间内完成。@Blastburne,没有使用合并排序的要求。如果确实需要对完整列表进行排序,这是最好的选择。如果一个近似值可以,您可以改为采样,并在次线性时间内得到答案。@blastfull,当我必须读取文件时会出现问题-记住它的值吗30gb@AnilPurswani:您不需要将整个文件加载到内存中。只需按顺序读取文件,更新计数。然后你可以用排序后的值重写文件。如果你真的需要对整个列表进行排序,这是你能做的最好的事情。如果一个近似值可以,您可以改为采样,并在次线性时间内得到答案。@blastfull,当我必须读取文件时会出现问题-记住它的值吗30gb@AnilPurswani:您不需要将整个文件加载到内存中。只需按顺序读取文件,更新计数。然后,可以使用排序后的值重写文件。