通过动态编程计算Pow功能

时间:2015-06-24 10:46:15

标签: c++ dynamic-programming

我知道pow(base, power)是C中的内置函数,复杂度为O(幂)。我可以通过动态编程来降低它的复杂性吗?

2 个答案:

答案 0 :(得分:4)

您可以在O(logn)

中计算它
int power(int x, unsigned int y)
{
    int temp;
    if( y == 0)
        return 1;
    temp = power(x, y/2);
    if (y%2 == 0)
        return temp*temp;
    else
        return x*temp*temp;
}

Here

中的详细信息

答案 1 :(得分:3)

如果您的输入参数是非负整数,那么您可以实现自己的pow

迭代,运行时间= O(n):

unsigned long long pow(unsigned long long x,unsigned int n)
{
    unsigned long long res = 1;
    while (n--)
        res *= x;
    return res;
}

递归,运行时间= O(n):

unsigned long long pow(unsigned long long x,unsigned int n)
{
    if (n == 0)
        return 1;
    if (n == 1)
        return x;
    return pow(x,n/2)*pow(x,n-n/2);
}

有效,运行时间= O(log(n)):

unsigned long long pow(unsigned long long x,unsigned int n)
{
    unsigned long long res = 1;
    while (n > 0)
    {
        if (n & 1)
            res *= x;
        n >>= 1;
        x *= x;
    }
    return res;
}