void function(int n ) {
int i, j , k ;
for ( i = n/2 ; i <= n ; i ++)
for ( j = 1; j + n/2 <= n; j++ )
for ( k = 1; k <=n ; k = k*2 )
count ++;
}
外循环执行n / 2次, 中间循环执行n / 2次和 内部llop执行登录时间。
上述函数的复杂度为O(n ^ 2logn),但n / 2和n / 2将如何变为n ^ 2?
由于
答案 0 :(得分:0)
循环是嵌套的,因此它们的所有计数都会相乘。 (n / 2)*(n / 2)是n ^ 2/4,但常数与big-O无关; n ^ 2/4 = O(n ^ 2)并且这样写。
答案 1 :(得分:0)
对于Big O表示法,省略常量:“如果f(x)是多个因子的乘积,则省略任何常量(产品中不依赖于x的项)。”
所以你的内部循环是logn,你的中间和外部循环是n / 2,但是一起那是(n / 2)*(n / 2)* logn = 1/4(n ^ 2logn),并且1 /丢弃4以得到O(n ^ 2logn)。
答案 2 :(得分:0)