我正在从一个文件中读取大量的整数,最后我想从这些整数中得到一些基本的统计数据(中位数,平均数,25个百分点,75个百分点等)。我可以随时计算一些这些统计数字,但在我看来,计算第25/75百分位数会很复杂。我认为,最简单的方法是将整数放在一个列表中,并从该列表中进行统计。但是,由于列表太大,可能会减慢程序使用这么多内存的速度。你们有什么建议吗? 这就是我获取数据的方式以及我想到的两个选项:
Scanner input = new Scanner(new File("name"));
ArrayList<Integer> lits= new ArrayList<Integer>();
while(input.hasNextLine()){
list.add(Integer.parseInt(input.nextLine()));
}
doStatistics(list);
OR
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()));
}
答案 0 :(得分: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*/}
}
这将为您留下一大堆数据,只需一个小数组即可。
答案 1 :(得分:1)
这篇文章和John D. Cook是你最好的选择:
http://www.codeproject.com/Articles/33781/Calculate-Percentiles-in-O-1-space-and-O-n-time