2012-06-14 9 views
6

Ich lese eine große Anzahl von Ganzzahlen aus einer Datei, und am Ende möchte ich einige grundlegende Statistiken von diesen Ganzzahlen (Median, Mittelwert, 25, Perzentil, 75. Perzentil usw.) erhalten. Ich könnte einige dieser statistischen Zahlen auf dem Sprung berechnen, aber es scheint mir, dass die Berechnung des 25./75. Perzentils kompliziert wäre. Der einfachste Ansatz wäre meiner Meinung nach, die Ganzzahlen in eine Liste zu setzen und die Statistiken aus dieser Liste zu erstellen. Da die Liste jedoch so groß ist, könnte sie das Programm für die Verwendung von so viel Speicher verlangsamen. Habt ihr Vorschläge? Dies ist eine Art, wie ich die Daten zu erfassen und die beiden Optionen Ich dachte an:Statistiken über großen Strom von Ganzzahlen 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); 

ODER

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

Sind die ganzen Zahlen begrenzt? also zwischen 0 und 10^5 oder so? – Andrew

+0

Ja, sie sind zwischen 0 und 100 aprox –

+6

Dann bedenken Sie das Auftreten von Zahlen statt sie zu akkumulieren. viel einfacher, diesen Datensatz zu handhaben. denke, 'neues Array [100]' – Andrew

Antwort

3

Da die Anzahl der Werte deutlich kleiner ist als die Anzahl der Samples, ist es sinnvoller, die Anzahl pro Wert als r zu speichern Evers.

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

Dies lässt Sie mit einer riesigen Datenmenge von nur einem winzigen Array dargestellt.