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^2f(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/

10-12 02:00