我正在尝试将两种不同的算法转换成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,使得Ai是元素X,X1,...,Xi的平均值。
这是我为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,使得Ai是元素X,X1,...,Xi的平均值。
这是我为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)),并发现哪种算法是最有效的。
在这方面的任何帮助都将非常感谢。
感谢您抽出时间来阅读和协助。
发布于 2011-02-28 09:04:06
首先,您应该将数组传递给函数并返回结果。
public static double[] prefixAverages(double[] inArray) {
double[] outArray = new double[inArray.length];
//...compute the averages...
return outArray;
}
然后,您可以在main方法中执行一些手动测试:
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这样的测试工具。
https://stackoverflow.com/questions/5137188
复制相似问题