大量のデータを処理できる、つまり、データセット全体を一度にメインメモリに保持できない場合でも動作できるソートアルゴリズムを探しています。
私が今まで見つけた唯一の候補はマージソートです。メインメモリにすべてのデータを一度に保持することなく、各マージでデータセットをスキャンするようにアルゴリズムを実装できます。私が念頭に置いているマージソートのバリエーションについては、この記事の「テープドライブで使用する」セクションで説明しています。
私はこれが良い解決策だと思います(複雑さO(nx log(n)))が、メインメモリに収まらない大きなデータセットで動作できる他の(おそらくより高速な)ソートアルゴリズムがあるかどうか知りたいです。
編集
回答に必要な詳細を次に示します。
- データは定期的に、たとえば月に1回ソートする必要があります。いくつかのレコードを挿入する必要はなく、データをインクリメンタルにソートする必要があります。
- 私のサンプルテキストファイルは約1 GBのUTF-8テキストですが、たとえば20 GBのファイルであっても、一般的な問題を解決したかったのです。
- データベースにはありません。また、他の制約のため、そうすることはできません。
- データは他の人によってテキストファイルとしてダンプされます。このテキストファイルを読み取るための独自のコードがあります。
- データの形式はテキストファイルです。改行文字はレコード区切り文字です。
私が考えていた改善の1つは、ファイルをメモリ内でソートできるほど小さいファイルに分割し、最後に上記のアルゴリズムを使用してこれらすべてのファイルをマージすることでした。