6

Gayle Laakmanの本、Cracking the Technical Interviewの質問11.5で、

「1行に1つの文字列を持つ20GBのファイルがあると想像してください。ファイルを並べ替える方法を説明してください」

私の最初の反応は、まさに彼女が提案した解決策でした。Xmbのデータを読み込み、並べ替えてからディスクに書き込むことで、ファイルを小さなチャンク(メガバイト)に分割しました。そして最後に、ファイルをマージします。

最終的なマージではメインメモリ内のすべてのデータを保持する必要があるため、このアプローチを採用しないことにしました。これは不可能であると想定しています。その場合、このソリューションはどの程度正確に当てはまりますか?

私の他のアプローチは、ほぼ無制限のディスク容量がある、または少なくともすでに持っているデータの2倍を保持するのに十分であるという仮定に基づいています。X mbのデータを読み込んで、それらのハッシュキーを生成できます。各キーはファイルの行に対応しています。すべての値がハッシュされるまで、これを続けます。次に、そのファイルの値を元のファイルに書き込む必要があります。

どう考えているか教えてください。

4

1 に答える 1

3

http://en.wikipedia.org/wiki/External_sortingでは、外部並べ替えのしくみについて詳しく説明しています。ソートされたすべてのチャンクを同時に読み取るのではなく、ソートされたチャンクのチャンクを読み取ることによって、N個のソートされたチャンクの最終マージを実行する方法を説明することにより、最終的に20GB全体をメモリに取り込まなければならないという懸念に対処します。

于 2013-07-21T08:17:14.697 に答える