2011-02-28 62 views
0

我試圖將兩個單獨的算法轉換爲Java代碼以便測試它們;第一算法(PrefixAverages1)爲:Java前綴均值/數組幫助

For i = 0 to n-1 
    Let s = X[0] 
    For j = 1 to i 
     Let s = s + X[j] 
    End For 
    Let A[i] = s/(i + 1) 
End For 

輸出:數字的n個元素的數組A使得A [i]爲元素X [0]的平均值,X [1],..., X [i]中。

這是我想出了PrefixAverages1了Java翻譯:

import java.util.Arrays; 

public class PrefixAverages1 { 

static double array[] = new double[10]; 

public static void prefixAverages(){ 

    for (int i = 0; i < 10; i++){ 

     double s = array[i]; 

      for (int j = 0; j < 10; j++){ 

       s = s + array[j]; 
      } 

     array[i] = s/(i + 1); 

     System.out.println(Arrays.toString(array)); 
    } 

} 

public static void main(String[] args){ 
    prefixAverages(); 
} 

} 

第二種算法(PrefixAverages2)爲:

Let s = X[0] 
For i = 0 to n-1 
    Let s = s + X[i] 
    Let A[i] = s/(i + 1) 
End For 

輸出:這樣的數的n元數組A A [i]是元素X [0],X [1],...,X [i]的平均值。

這是我想出了PrefixAverages2了Java翻譯:

import java.util.Arrays; 

public class PrefixAverages2 { 

static double array[] = new double[10]; 

public static void prefixAverages(){ 

     double s = 0; 

     for (int i = 0; i < 10; i++){ 
       s = s + array[i]; 
       array[i] = s/(i + 1); 
     } 
      array[0] = 10; 

     System.out.println(Arrays.toString(array)); 
} 

public static void main(String[] args){ 
    prefixAverages(); 
} 

} 

我試圖測試算法,但我不太知道從哪裏開始。我正在嘗試設置一個數組,然後通過手動運行這些算法來應用這些算法,以獲得較小的n值。如何開始將數組添加到數組中?

我也試圖通過計算基本操作來分析兩種算法,並推導出兩種算法的T(n)。我希望能夠計算出每種算法的時間複雜度(Big Oh,O(n)),並發現哪一種算法最有效。

任何幫助,這將不勝感激。

感謝您花時間閱讀並提供幫助。

+0

是否有一個很好的理由,你使用一個數組的輸入和輸出?你應該分開這兩個,至少現在。您的第一個實現肯定不會工作,因爲您覆蓋了稍後需要閱讀的部分數組。 – 2011-02-28 00:57:52

+0

@Mark謝謝您的回覆,Mark。我只是遵循僞代碼算法的說法,但也許我說你做錯了。你能否好好建議一種替代方式呢?謝謝。米克。 – MusTheDataGuy 2011-02-28 01:00:47

+0

看看你的僞代碼。它使用不同的數組來輸出和輸入('A []'vs'X []')。 – 2011-02-28 01:05:15

回答

3

首先,您應該將數組傳遞給函數並返回結果。

public static double[] prefixAverages(double[] inArray) { 
    double[] outArray = new double[inArray.length]; 
    //...compute the averages... 
    return outArray; 
} 

然後,你可以做一些手工測試你的主要方法:

public static void main(String... args) { 
    System.out.println(
     Arrays.equals(
      prefixAverages(new double[] {1, 2, 3, 4}), 
      new double[] {1, 1.5, 2, 2.5} 
     ) 
    ); 
} 

確保此代碼打印true

現在,這不是一個非常強大的解決方案,因爲浮點數的精度限制,但它應該讓你開始。如果你想真正考慮測試你的代碼,你應該研究使用像JUnit這樣的測試工具。

+0

謝謝大家的幫助 - 您的意見幫助我解決了我的問題! – MusTheDataGuy 2011-02-28 23:00:10