これは、クラッキング コーディング インタビューからの別の質問です。それを読んでも、まだ疑問が残ります。
9.4 If you have a 2 GB file with one string per line, which sorting algorithm
would you use to sort the file and why?
解決
インタビュアーが 2GB のサイズ制限を与えるとき、それはあなたに何かを伝えるはずです。どうしようか?データの一部のみをメモリに取り込みます.. アルゴリズム:
利用可能なメモリの量は? X MB のメモリが利用可能であると仮定しましょう。
ファイルを K 個のチャンクに分割します。ここで、X * K = 2 GB です。各チャンクをメモリに取り込み、通常どおり O(n log n) アルゴリズムを使用して行を並べ替えます。行をファイルに保存します。
次に、次のチャンクをメモリに取り込み、並べ替えます。
完了したら、それらを 1 つずつマージします。
上記のアルゴリズムは、外部ソートとも呼ばれます。ステップ 3 は N-way マージと呼ばれます。外部ソートを使用する理由は、データのサイズにあります。データが大きすぎてすべてをメモリに入れることができないため、ディスク ベースの並べ替えアルゴリズムを使用する必要があります。
疑問に思う:
ステップ 3 でマージソートを実行しているときに、2 つの配列を比較するとき、比較するたびに 2*X のスペースが必要ですか? 制限は X MB でした。チャンクを (X/2)*2K = 2GB にする必要がありますか? したがって、各チャンクは X/2 MB になり、2K チャンクになります。または、マージソートが間違っていることを理解しているだけですか? ありがとう!