2011-02-28 6 views
0

두 개의 개별 알고리즘을 테스트하기 위해 Java 코드로 변환하려고합니다. 제 알고리즘 (PrefixAverages1) 인 :Java prefixAverages/array help

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를 예 [I]가 원소 X [0]의 평균 인 것을, X [1], ..., X [i].

이 난 PrefixAverages1위한 해낸 자바 번역된다

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에 대한 해낸 자바 번역 한 것입니다 : 내가 알고리즘을 테스트하려고하지만 어디서부터 시작 꽤 잘 모르겠습니다하고

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

입력 및 출력에 하나의 배열을 사용하는 데는 충분한 이유가 있습니까? 적어도 두 가지를 분리해야합니다. 나중에 읽을 필요가있는 배열의 부분을 덮어 쓰기 때문에 첫 번째 구현이 제대로 작동하지 않습니다. –

+0

@ 마크 답장을 보내 주셔서 감사합니다, 마르크. 나는 알고리즘 의사 코드가 말한 것을 단지 따르고 ​​있지만 어쩌면 내가 말한 것처럼 잘못된 것을했을 수도있다. 이 일을하는 다른 방법을 친절하게 제안 할 수 있습니까? 고맙습니다. 믹. – MusTheDataGuy

+0

의사 코드를 살펴보십시오. 출력과 입력을 위해 다른 배열을 사용합니다 ('A []'vs'X []'). –

답변

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