这段代码的Big-O复杂性是什么?
什么是大O这段代码的Big-O复杂性是什么?,big-o,time-complexity,Big O,Time Complexity,什么是大O void fun(int n) { for(i=1; i<=n; i=i+2) { } } 我的答案是:O(logn),因为这是二次的(我认为) void fun(int n){ 对于(i=1;i大O符号的形式定义为 f(x)∈ O(g(x)),因为存在c>0(例如,c=1)和x0(例如,x0= 5) 当x>x0时,f(x)0(例如,c=1)和x0(例如,x0= 5) 当x>x0时,f(x)
void fun(int n) {
for(i=1; i<=n; i=i+2) { }
}
我的答案是:O(logn),因为这是二次的(我认为)
void fun(int n){
对于(i=1;i大O符号的形式定义为
f(x)∈ O(g(x)),因为存在c>0(例如,c=1)和x0(例如,x0=
5) 当x>x0时,f(x)
从你的想法来看,你似乎不明白,如果有一个常数可以乘以g(x),使得f(x)总是小于或等于g(x),那么f(x)的数量级并不比g(x)大
以下是big-O解决方案:
(1) O(n)。O(n/2)是O(n)
(2) O(n),因为这与(1)相同
(3) O(n^2),因为内部循环在外部循环的每次迭代中运行2*n次,外部循环运行n次。因此,运行是2*n*n,即O(n^2)大O符号的形式定义是
f(x)∈ O(g(x)),因为存在c>0(例如,c=1)和x0(例如,x0=
5) 当x>x0时,f(x)
从你的想法来看,你似乎不明白,如果有一个常数可以乘以g(x),使得f(x)总是小于或等于g(x),那么f(x)的数量级并不比g(x)大
以下是big-O解决方案:
(1) O(n)。O(n/2)是O(n)
(2) O(n),因为这与(1)相同
(3) O(n^2),因为内部循环对外部循环的每次迭代运行2*n次,外部循环运行n次。因此,运行为2*n*n,即O(n^2)
O(n):即使将处理的值的数量增加一半,这仍然与n成比例。比较n、n/2和log n的这些图:
您可以看到,n/2与n成正比(总是正好是一半,即它被一个常数因子关闭),而log n的增加速度明显较慢
在big-O表示法中,常数因子被忽略,即O(2n)=O(n),因为当n非常大时,2与n相比是不重要的
假设您可能是指(i=1;i)的
O(n):即使将处理的值的数量增加一半,这仍然与n成比例。比较n、n/2和log n的这些图:
您可以看到,n/2与n成正比(总是正好是一半,即它被一个常数因子关闭),而log n的增加速度明显较慢
在big-O表示法中,常数因子被忽略,即O(2n)=O(n),因为当n非常大时,2与n相比是不重要的
假设你的意思是(i=1;i第一个是O(n)。是的,你跳过了一半的循环周期,但这意味着每n,你循环n/2次,O(n/2)与O(n)相同
第二个看起来和第一个一样,但我想你的意思是:
for (i = 1; i < n; i=i*2)
}
(i=1;i
}
是的,这是O(logn)
第三个可能会让你感到困惑,因为它给人的印象是一个三重嵌套的循环,但事实并非如此,两个内部循环嵌套在第一个循环上,所以它实际上是O(n*(n+n))=O(n*2n)=O(2n^2),最后是O(n^2)第一个是O(n)是的,你跳过了一半的循环周期,但这意味着每n,你循环n/2次,O(n/2)与O(n)相同
第二个看起来和第一个一样,但我想你的意思是:
for (i = 1; i < n; i=i*2)
}
(i=1;i
}
是的,这是O(logn)
第三个可能会让你感到困惑,因为它给人的印象是一个三重嵌套的循环,但实际上不是,两个内部循环嵌套在第一个循环上,所以它实际上是O(n*(n+n))=O(n*2n)=O(2n^2),最后是O(n^2)
循环大约迭代n/2次,即O(n)
这不是二次的,这是指数的,它是循环的 大约记录(n)次(以2为基数,但实际上并非如此 这里是物质),因此它在O(log(n))中 二次(二次多项式)将是 试着看看这两者之间的区别,指数开始较慢,但增长越快,我增长得越高
void fun(int n){
对于(i=1;i
循环大约迭代n/2次,即O(n)
这不是二次的,这是指数的,它是循环的
大约记录(n)次(以2为基数,但实际上并非如此
这里是物质),因此它在O(log(n))中
二次(二次多项式)将是
试着看看这两者之间的区别,指数开始较慢,但增长越快,我增长得越高
void fun(int n){
你的前两个例子似乎是相同的。在第二种情况下,你的意思是吗?你的前两个例子似乎是相同的。在第二种情况下,你的意思是吗
for (i = 1; i < n; i=i*2)
}
void fun(int n){
for(i=1;i<=n;i=i+2){;}
}
i: 1 3 5 7 9 11 13 15 ...
void fun(int n){
for(i=1;i<=n;i=i*2){;}
}
i: 1 2 4 8 16 32 64 128 ...
i: 1 4 9 16 25 36 49 64 ...
void fun(int n){
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){;} // O(n)
for(k=1;k<=n;k++){;} // O(n)
}
}