2012-06-14 9 views
6

Estoy leyendo una gran cantidad de enteros de un archivo, y al final quiero obtener algunas estadísticas básicas de estos enteros (mediana, media, 25percentil, 75percentil, etc.). Pude calcular algunos de estos números estadísticos sobre la marcha, pero me parece que calcular el percentil 25/75 sería complicado. El enfoque más simple, creo, sería colocar los enteros en una lista y hacer las estadísticas de esa lista. Sin embargo, dado que la lista es tan grande, podría ralentizar el programa por usar tanta memoria. ¿Tienen alguna sugerencia? Esta es una especie de cómo adquirir los datos y las dos opciones pensé:Estadísticas en la secuencia grande de enteros en java

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

O

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())); 
} 
+1

¿Están los números enteros acotados? es decir, entre 0 y 10^5 o algo así? – Andrew

+0

Sí, están entre 0 y 100 aproximadamente. –

+6

Luego, considere contar las ocurrencias de números en lugar de acumularlos. mucho más fácil de manejar ese conjunto de datos. pensar, 'new Array [100]' – Andrew

Respuesta

3

Dado que el número de valores es significativamente menor que el número de muestras, tiene más sentido almacenar el número por valor que el r Everse.

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*/} 
} 

Esto le deja con un gran conjunto de datos representados por una pequeña matriz.

Cuestiones relacionadas