Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
大O符号混淆(C++)_C++_Loops_Big O - Fatal编程技术网

大O符号混淆(C++)

大O符号混淆(C++),c++,loops,big-o,C++,Loops,Big O,内部for循环是ON/2,但是我想知道为什么这是因为 例如,如果v.size为10,则 10>=0✓ 8>=0✓ 6>=0✓ 4>=0✓ 2> =0✓ 0>=0✓ -2失败 内部for循环可以在输入大小为10的情况下执行6次 我错过了什么 编辑*我知道只考虑最高震级。这个问题更多的是关于提出最初的ON/2+1的问题,复杂性为您提供了一种方法来评估完成某个大小的输入所需的时间,而不是它将执行的准确时间 P>因此,在处理复杂性时,你应该只考虑最高值,而不是常数乘积: int f(const std

内部for循环是ON/2,但是我想知道为什么这是因为

例如,如果v.size为10,则

10>=0✓

8>=0✓

6>=0✓

4>=0✓

2> =0✓

0>=0✓

-2失败

内部for循环可以在输入大小为10的情况下执行6次

我错过了什么


编辑*我知道只考虑最高震级。这个问题更多的是关于提出最初的ON/2+1的问题,复杂性为您提供了一种方法来评估完成某个大小的输入所需的时间,而不是它将执行的准确时间

<> P>因此,在处理复杂性时,你应该只考虑最高值,而不是常数乘积:

int f(const std::vector<int>& v) {      
    int result = 0;
    for (int i = 0; i < v.size(); ++i) {                O(N)
        for (int j = v.size(); j >= 0; j -= 2) {        O(N/2)
            result += v.at(i) * j;
        }
    }
    return result;
}

你在评论中说:


我理解这一点,但我只是好奇ON/2是如何获得的

请看下表:

O(N/2 + 1) = O(N/2) = O(N)

如果从方程中取常数1,则内循环为开/2。

内循环为开。开/2=开。常数不是渐近增长符号的一个促成因素。我理解这一点,但我只是好奇ON/2是如何获得的,因为它足够接近摇滚乐。这也无关紧要。重要的是,如果你把N加倍,你的功就差不多加倍了。我忍不住要指出,作为旁白,整个计算可以重写为ON而不是ON^2.result+=N*v[I]+N-2*v[I]+N-4*v[I]+。。。与使用基本数学计算总标量N+N-2+N-4+相同。。。乘以v[i]一次。但这不是你的问题,所以我想我只是顺便提一下。啊,答案键是On/2,它把我甩了。我知道考虑的是最高震级,如果它在/2+1上是有意义的。顺便说一下,在j==0的情况下循环是没有意义的,因为它不会影响最终结果。@Uriel我想它仍然会运行2次?3>=0 , 1>=0, -1 fails@csguy我的错。我多次误解了你考虑问题的方式。开/2+1就可以了。
Size of vector     Number of time the inner loop is executed:
0                  1
1                  1
2                  2
3                  2
... 
100                51
101                51
...
2x                 x + 1
2x + 1             x + 1