以下代码给我一个O(n)。如何编写时间复杂度为O(c ^ k)的for循环?
int power(int x, unsigned int y)
{
if( y == 0)
return 1;
else if (y%2 == 0)
return power(x, y/2)*power(x, y/2);
else
return x*power(x, y/2)*power(x, y/2);
}
答案 0 :(得分:1)
不确定你在问什么,但是你可以清楚地修改这个代码并通过简单地去除重复递归来赢得很多(不是递归地计算两次相同的东西)。
if (y%2 == 0) {
int res = power(x, y/2);
return res * res;
}
以这种方式编写将允许您编写while循环而不是递归。
答案 1 :(得分:0)
O(c^k)
- 指数时间复杂度算法,例如,强力搜索和旅行商问题。
我举一个蛮力搜索的例子。如果您有一组长度为c
的字符,并且密码长度为k
。然后你需要O(c^k)
时间来破解密码。