Java prefixAverages / массив help - PullRequest
       1

Java prefixAverages / массив help

0 голосов
/ 28 февраля 2011

Я пытаюсь перевести два отдельных алгоритма в код Java, чтобы проверить их; первый алгоритм (PrefixAverages1):

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].

Это перевод на Java, который я придумал для 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].

Это перевод на Java, который я придумал для 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)) каждого алгоритма и выяснить, какой из них наиболее эффективен.

Любая помощь с этим будет принята с благодарностью.

Спасибо, что нашли время, чтобы прочитать и помочь.

1 Ответ

3 голосов
/ 28 февраля 2011

Прежде всего, вы должны передать массив в функцию и вернуть результат.

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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...