使用Ruby作为脚本语言,使用具有4gb RAM的计算机对30gb字符串进行排序的最佳方法是什么?

Cri*_*tes 6 ruby theory sorting algorithm

嗨,我看到这是一个面试问题,并认为这是一个有趣的问题,我不确定答案.

什么是最好的方式?

Way*_*rad 8

假设*nix:

system("sort <input_file >output_file")
Run Code Online (Sandbox Code Playgroud)

"sort"可以使用临时文件来处理大于内存的输入文件.如果需要,它具有调整主内存量和将使用的临时文件数量的开关.

如果不是*nix,或者面试官因为横向答案而皱眉,那么我将编码外部合并排序.有关外部排序算法的详细摘要,请参阅@ psyho的答案.


Ign*_*ams 5

将它们放在数据库中,让数据库担心它.


psy*_*yho 5

一种方法是使用外部排序算法:

  1. 将一大块文件读入内存
  2. 使用任何常规排序算法(如quicksort)对该块进行排序
  3. 将排序后的字符串输出到临时文件中
  4. 重复步骤1-3,直到处理整个文件
  5. 通过逐行读取临时文件来应用合并排序算法
  6. 利润!