【发布时间】:2014-11-24 09:16:14
【问题描述】:
我们正在计算机科学入门课程中学习效率分析,但我无法解决这个问题。
假设我有一个方法:
public static void foo(int[][] arr, int num1, int num2) {
for (int i=0;i<arr.length;i++) {
arr[0][i] = num1*i;
}
for (int j=0;j<arr.length;j++) {
arr[i][0] = num2*i
}
}
我的第一个问题是,如果我有一个方法,其中有 3 个 for 循环,但它们没有嵌套,那么增长率会是多少?
另外,对于这个特殊的组合方法,这个方法的输入大小是数组的面积吗?因为每个 for 循环都从 i=0 变为 i= 数组大小
最后,如果
public static void fee(int[][] arr, double num1, double num2) {
num1=num1*Math.random();
while (num1 == 0) {
num1=num1*Math.random();
}
for (int i=0;i<num1;i++) {
//do something with arr
}
num2=num2*Math.random();
while (num2 == 0) {
num2=num2*Math.random();
}
for (int j=0;j<num2;j++) {
//do something with arr
}
}
我将如何寻找 Big-O 分析?
谢谢,我已经阅读了多个关于寻找 big-O 的资源,但我仍然感到困惑。
【问题讨论】:
-
您的第一个方法无法编译。
arr[i][0] = num2*i应该是arr[j][0] = num2*j。你的第二种方法也不能编译——你应该把 double 转换为 int——如果num1或num2永远为 0,它将无限循环。 -
对不起,我只是写这些真的很快只是为了提供一个想法,因为我的大学不允许我在网上发布我的实际作业。
-
我很确定你在哪里有
num2 == 0它应该是num2 != 0 -
这可能对未来的任何人都有帮助stackoverflow.com/questions/59558274/…