package bsearch.util; import java.util.Collections; import java.util.List; public class Stats { /** calculates sum of a list of numbers */ public static double sum( List<Double> dlist ) { double sum = 0; for (double d: dlist) { sum += d; } return sum ; } /** calculates arithmetic mean of a list of numbers */ public static double mean( List<Double> dlist ) { double sum = 0; for (double d: dlist) { sum += d; } return sum / dlist.size(); } /** calculates arithmetic mean of a list of (not necessarily sorted) numbers*/ public static double median(List<Double> dlist) { List<Double> sortedlist = new java.util.ArrayList<Double>(dlist); Collections.sort(sortedlist); int len = sortedlist.size(); if (len % 2 == 0) { return (sortedlist.get(len / 2 - 1) + sortedlist.get(len / 2)) / 2; } else { return sortedlist.get(len / 2); } } /** calculates sample variance (as opposed to population variances) */ public static double variance( List<Double> dlist ) { double n = dlist.size(); if (n <= 1) { return 0; } double mean = mean(dlist); double sum = 0; double sumsq = 0; for (double d: dlist) { sum += (d - mean); sumsq += (d - mean) * (d - mean); } return (sumsq - sum * sum / n) / (n - 1); } public static double stdev(List<Double> dlist) { return StrictMath.sqrt(variance(dlist)); } }