2012-06-14 17 views
6

Sto leggendo un numero enorme di numeri interi da un file e alla fine voglio ottenere alcune statistiche di base da questi numeri interi (mediana, media, venticinquesimo, settantacinquesimo, ecc.). Potrei calcolare alcuni di questi numeri di statistiche in movimento, ma mi sembra che calcolare il 25 °/75 ° percentile sarebbe complicato. L'approccio più semplice, penso, sarebbe quello di inserire gli Interi in una lista e fare le statistiche da quella lista. Tuttavia, poiché la lista è così grande potrebbe rallentare il programma per l'utilizzo di così tanta memoria. Avete qualche suggerimento? Questa è una sorta di come ho acquisire i dati e le due opzioni che ho pensato:Statistiche sul grande flusso di numeri interi in 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

Gli interi sono limitati? cioè tra 0 e 10^5 o qualcosa del genere? – Andrew

+0

Sì sono compresi tra 0 e 100 aprox –

+6

Quindi prendere in considerazione il conteggio delle occorrenze dei numeri anziché accumularli. molto più facile da gestire quel set di dati. pensa, 'new Array [100]' – Andrew

risposta

3

Dato che il numero di valori è significativamente inferiore al numero di campioni, ha più senso memorizzare il numero per valore rispetto alla 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*/} 
} 

Questo ti lascia con un enorme insieme di dati rappresentati da solo una piccola serie.

Problemi correlati