在O(p * log(5))中我们可以忽略log 5,因为它是常数吗?

时间:2014-08-17 06:54:06

标签: algorithm time-complexity asymptotic-complexity

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)

2 个答案:

答案 0 :(得分:4)

抱歉我的英语不好;我之前从未写过任何包括英语数学的文章。

您似乎误解了O()的含义。

&#34; f(x)是O(g(x))&#34;表示X存在f(x) <= N * g(x)x > XN,其中f(x) = log2 * x为常量。

例如,假设f(x) <= log2 * g(x)。明确g(x) = x N。所以我们可以说&#34; f(x)是O(x)&#34;。 (我说log2是不变的;如你所知,f(x) = x^2是不变的。)

但是,当谈到f(x) > N * x时,f(x) O(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))是常数......

正如您从这句话中所知,O()等于{{1}}。常数倍不会对{{1}}产生任何影响。

答案 1 :(得分:1)

大O表示法只定义了函数的限制行为。因此,不需要日志常量,因为这不会定义其行为