Algorithm 如何对30gb文件进行排序,重复使用1-1000个数字

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时,读

我有30 gb的文件,这是只有1-1000个数字重复。我想知道如何对该文件进行排序,您需要首先将该文件加载到内存中

我已经通过其他链接,所以,但不同意的一点排序,它多块的文件,并保持在临时文件。正如我所相信的,在进程结束时,我将剩下两个大文件(每个15 GB)进行排序。我无法加载每个文件以进行合并和排序


有什么建议吗?

如果这些值都在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:您不需要将整个文件加载到内存中。只需按顺序读取文件,更新计数。然后,可以使用排序后的值重写文件。