6

ファイルから膨大な数の整数を読み取っています。最後に、これらの整数からいくつかの基本的な統計情報 (中央値、平均値、25 パーセンタイル、75 パーセンタイルなど) を取得したいと考えています。これらの統計値の一部は外出先で計算できますが、25/75 パーセンタイルの計算は複雑になるようです。最も簡単なアプローチは、整数をリストに配置し、そのリストから統計を行うことだと思います。ただし、リストが非常に大きいため、大量のメモリを使用するためにプログラムの速度が低下する可能性があります。何か提案はありますか?これは、私がデータを取得する方法と、私が考えた 2 つのオプションのようなものです。

Scanner input = new Scanner(new File("name"));
ArrayList<Integer> lits= new ArrayList<Integer>();
while(input.hasNextLine()){
  list.add(Integer.parseInt(input.nextLine()));
}
doStatistics(list);

また

Scanner input = new Scanner(new File("name"));
while(input.hasNextLine()){
   //I dont know how I would acomplish this for the percentile stats
   acqquireStats(Integer.parseInt(input.nextLine()));
}
4

2 に答える 2

3

値の数がサンプルの数よりも大幅に少ないことを考えると、値ごとに数を格納する方が逆よりも理にかなっています。

Long[] samples = new Long[101];

while(input.hasNextLine()){
    try{
      samples[Math.max(0, Math.min(100, Integer.parseInt(input.nextLine())))];
    } catch (ParseException e){/*not a number*/}
}

これにより、小さな配列だけで表される膨大なデータ セットが残ります。

于 2012-06-14T18:01:05.333 に答える
1

この記事と John D. Cook が最善の策です。

http://www.codeproject.com/Articles/33781/Calculate-Percentiles-in-O-1-space-and-On-time

于 2012-06-14T17:25:53.570 に答える