Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

膨大なデータをソート

億単位の個数のデータをクイックソートでソートさせようとしているんですが、何か良い方法はないでしょうか?少ない個数のデータなら単純に配列に格納してそれをソートさせればいいんですが、億単位ともなると、配列の数が多くなりすぎて、エラー起きてしまいます。どなたかご教授お願いいたします。

3

回答

3239

閲覧

3件の回答

評価

0

クイックソートでは無理ですね。
マージソートをファイル出力と組み合わせれば良いでしょう。

評価

0

メモリに収まりきらないのであればディスクを使うしかないと思います。
ディスクアクセスの回数を考えるとディスクを使いながら1回でソートを行うのではなく、一度データをいくつかのファイルに分割してから、それぞれをソートした後に1つのファイルにマージするという形になるのはないでしょうか。
分割後のファイルサイズはJavaを実行する際のメモリ量を基に決定します。
分割方法に関してはもとのデータの種類や保存方法によると思います。
1番楽なのはデータが数値の場合に数値の値で(例えば100万単位で)分割してからそれぞれをソートすればあとはつなげるだけです。
そのような事ができるデータではない場合には単純にメモリで扱える量のデータを読み込んだら、その分だけでソートしてファイルに保存していく処理を繰り返し、最後にソート済みデータファイルをマージするしかないような気がします。

このような処理に詳しいわけではないのでもっといい方法があるかもしれません。

評価

0

億単位の個数のデータ?!

データベースでも使った方が簡単かつ早いんじゃないかな。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。