(C ^ k)的大O表示法

时间:2013-06-23 10:50:38

标签: java big-o time-complexity

以下代码给我一个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);

}

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)时间来破解密码。