【发布时间】:2019-09-16 15:31:10
【问题描述】:
我星期四有一个关于数据结构和算法的考试,去年的考试中有一个考试题,你必须确定用 java 编写的三种算法的复杂性。 你能帮我解决这些算法吗,也许对你的解决方案有一个非常棒的解释。谢谢!
我的解决方案是:
AlgorithmOne:n*log(n) 第一个循环将以 O(n) 运行,第二个循环以 log(n) 运行,因为计数器变量在每次迭代中加倍。
AlgorithmTwo:不编译,如果不使用标准 java 编译器编译它并不重要。由于 return 语句,它在 O(1) 中,因为这将在 1 次迭代后结束算法。
算法三:for循环的复杂度是n,因为i++和n/2会变成n,递归的复杂度是O(n),因为它会被执行n次。总结 algorithmThree 的复杂度应该是 O(n),因为递归函数没有和循环相连。
int algorithmOne(int n){
int sum = 0;
for(int i = 0; i < n/2; i++){
for(int j = 1; j <= n/4; j= j *2){
sum++;
}
}
return sum;
}
int algorithmTwo(int n){
int sum = 0;
for(int i = 0; i < n/2; i++){
for(int j = n; j > 1; j = j/2){
sum++;
return sum;
}
}
}
int algorithmThree(int n){
int sum = 0;
if(n>1){
sum = algorithmThree(n-1)+1;
}
else{
sum = 1;
}
for(int i=0; i < n/2; i++){
sum = sum-1;
}
return sum;
}
【问题讨论】:
-
再看看三。
标签: java time-complexity complexity-theory