我知道pow(base, power)
是C中的内置函数,复杂度为O(幂)。我可以通过动态编程来降低它的复杂性吗?
答案 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;
}
中的详细信息
答案 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;
}