2012-06-14 36 views
6

Tôi đang đọc một số lượng lớn các số nguyên từ một tệp và cuối cùng tôi muốn lấy một số thống kê cơ bản từ các số nguyên này (trung bình, trung bình, 25 phần trăm, 75 phần trăm, v.v ...). Tôi có thể tính toán một số số liệu thống kê này trên đường đi, nhưng có vẻ như với tôi rằng việc tính tỷ lệ phần trăm 25/75 sẽ phức tạp. Cách tiếp cận đơn giản nhất, tôi nghĩ, sẽ là đặt các số nguyên trong danh sách và thực hiện thống kê từ danh sách đó. Tuy nhiên, vì danh sách quá lớn nên nó có thể làm chậm chương trình để sử dụng quá nhiều bộ nhớ. Các bạn có bất kỳ đề nghị gì không? Đây là loại làm thế nào tôi có được các dữ liệu và hai lựa chọn, tôi nghĩ:Số liệu thống kê trên luồng lớn các số nguyên trong 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); 

HOẶC

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

Các số nguyên có bị chặn không? tức là từ 0 đến 10^5 hay gì đó? – Andrew

+0

Có chúng nằm trong khoảng từ 0 đến 100 aprox –

+6

Sau đó, hãy xem xét việc đếm số lần xuất hiện của các số thay vì tích lũy chúng. dễ dàng hơn để xử lý tập dữ liệu đó. suy nghĩ, 'Mảng mới [100]' – Andrew

Trả lời

3

Do số lượng giá trị nhỏ hơn đáng kể so với số lượng mẫu, nên lưu trữ số trên mỗi giá trị hơn 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*/} 
} 

Điều này khiến bạn có một tập dữ liệu khổng lồ được biểu thị bằng một mảng nhỏ.

Các vấn đề liên quan