2013-09-25 63 views
0

我正在做一個練習題,我被卡住了。現在的問題是Java數組建議

「給定陣列的n個(比如說加倍),考慮計算 平均第i個數字,用於i0n-1的問題。也就是說,計算 數組b長n,其中 b[i] = a[0] + a[1] ....+ a[i]/(i + 1)0 <= i < n。 寫Java程序來解決這個問題,你的程序可以生成自己的 陣列,例如a[i] = i + 1。見數組多大,你可以在不到 5秒處理。(對於完全的信貸,它應該至少有一百萬。) 表徵算法的時間複雜性。「

這是我在解決它的嘗試:

public class largeArray{ 

public static void main(String[] args){ 

    double[] aa = new double[1000000]; 
    System.out.println(CalculateAvg(aa)); 




} 
public static double CalculateAvg(double[] a){ 
    int i =0; 
    double[] array = new double[i]; 
    a[i] = i + 1; 

    for(int k=0; k<array.length; i++){ 
    double total = a[k]+a[k]; 
    double sum = ((total)/a[i]); 
    } 

return a[i]; 
} 
} 
+7

你沒有真正總結的價值觀 - 你宣佈對循環的每個迭代一個新的局部變量和加倍現有的價值......,什麼是對的'array'價值? –

+0

@JonSkeet基本上我想要做的是創建一個程序,它有一個不固定值的數組,並且在5秒後找到平均值的問題已經相應地解決了這個問題。我不太清楚如何初始化初始值,但要繼續運行。數組值是在5秒後測試多少次。它沒有真正的意義,只是一個考驗而已。 – user2045470

+0

我看不到在5秒*之後找到平均值*的地方。它必須在* 5秒之前完成*。提示:嘗試聲明循環中的總數*,從零開始,並將這些值相加。然後想想平均值是多少... –

回答

0

要開始做一個函數來得到n個已知數(maxNum

public int getAvgForNumbers(int maxNum){ 
int sum = 0; 

for(int k=1; k<=maxNum; k++){ 
    sum = sum + k; 
    } 

return sum/maxNum; 
} 

的平均現在使用此功能來填充數組通過調用它從值1開始 - getAvgForNumbers(1)直到您感覺會得到的數字getAvgForNumbers(x)

1

如果我得到它相關ctly您必須生成一個數組B,其中B [i]是輸入數組的前i個元素的平均值。

如果這是問題,你可以做一個單一的循環,總和A [i] + B [i-1],然後做B [i-1]/i;

所以應該如果A是輸入陣列和B是輸出:

B[0] = A[0] 
for (int i = 1; i < n; i ++) { 
    B[i] = A[i] + B[i-1]; 
    B[i-1] /= i; 
} 
B[n-1] /= n; 

這是O(n),它是在複雜度方面的最佳值(因爲這個問題是計算的n的平均數是T(n),即不能用小於O(n)的複雜度來解決)。

由於每個循環只有幾條指令,所以常數也很低。這應該讓你保持5秒鐘的方式。

Ahh我忘記了,A的產生超出了5秒分析(這是輸入)。

問候

+0

對不起,我只是忘記了數組B的最後一個元素(最後一個平均值)的劃分。我剛剛添加了它 – luiso1979