FUNC(P)的大O时间复杂度是多少?
C++代码如下。
int get_power(int a, int b)
{
if(!b) return 1;
if(b%2) return a * get_power(a, b/2);
return get_power(a, b/2);
}
int func(int p)
{
int sum = 0;
for(int i = 1; i <= p; ++i)
{
sum += get_power(i, 5);
}
return sum;
}
int main()
{
int c;
scanf("%d",&c);
func(c);
}
根据我的理解,复杂性是O(p)!!
对吗???
有可能是o(p*log5)
最佳答案
对不起,我英语不好,我以前从来没有用英语写过包括数学在内的任何文章。。
你似乎误解了O()
的意思。
“f(x)是O(g(x))”的意思是存在X
,这使得<f(x) <= N * g(x)
对于每个x > X
,其中N
是常数。
例如,假设f(x) = log2 * x
。可以肯定的是,f(x) <= log2 * g(x)
在哪里所以我们可以说“f(x)是o(x)”。(我说过g(x) = x
是常数;正如你所知,N
是常数。)
然而,当谈到log2
时,f(x)不是o(x),因为f(x) = x^2
在f(x) > N * x
处。不能存在x > N
这就使得X
在哪里f(x) <= N * x
。
你问X > x
的复杂性是func
还是O(p)
。答:都是真的。
…这就证明了O(p * log5)
其中f(x) <= N * g(x)
是常数…
从这句话中可以知道,N
等于O(g(x) * log5)
常数倍数对O(g(x))
没有任何影响。
关于algorithm - 在O(p * log(5))中,我们可以忽略log 5作为常量吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25346950/