public void run(int n)
{
System.out.println(power(3, n));
}
public int power(int c, int n)
{
int result = 1;
for (int i = 0; i < c; i++) {
result *= n;
}
return result;
}
这段代码给我一个O(c ^ k) - 指数时间复杂度吗?
答案 0 :(得分:2)
说实话,如果你想向那些教你的课程的人表明他们的问题陈述可能不是他们的意图,我会这样做:
for(int i = 0; i < c; i++) { /*your code here*/}
这是在O(c)中,并且因为对于k> 0,O(c)是O的严格子集(c k )。 1,它也在O(c k )。这可能不是人们教你的课程所期望的,他们可能希望你写一个以Θ(c k )运行的循环。
另一方面说明:
c k 和3 n 不是一回事。假设输入的长度是n,c k 是恒定时间,而3 n 是指数时间。假设输入的长度为c,c k 为多项式,而3 n 为常数。假设输入的长度为k,c k 为指数,而3 n 为常数。
答案 1 :(得分:0)
没有计算3提升到幂n不是复杂度O(3 ^ n)。您的算法复杂度仅为O(c),因为它只迭代c次。要编写O(3 ^ n)算法,一种方法是运行for循环3 ^ n次。这种for循环的一个例子是:
for(long i = 0; i < Math.power(3, n); i++)
答案 2 :(得分:0)
这段代码给我一个O(c ^ k) - 指数时间复杂度吗?
没有。 power(c, N)
执行循环的c
次乘法/迭代,因此它是O(C)。这意味着(由于c
是run(n)
中的常量),test(n)
实际上是O(1)
。
另一点需要注意的是power(c, n)
计算n c NOT c n 。