这段代码的Big-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)

什么是大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) 从你的想法来看,你似乎不明白,如果有一个常数可以乘以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)
        }
    }