Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.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
C++ 大O和T(n)混淆_C++_For Loop_Big O - Fatal编程技术网

C++ 大O和T(n)混淆

C++ 大O和T(n)混淆,c++,for-loop,big-o,C++,For Loop,Big O,我目前正在做一些关于大O和T(n)的家庭作业,遇到了一些问题。我已经像我的教授所说的那样插入了数字,并且计算出了每个循环运行的次数,但是我不知道如何从这些信息中推导出t(n)和大O。我浏览了整个网站,但似乎找不到任何帮助。这是一些没有分配的问题,但与我正在努力解决的分配问题非常相似 如果你能一步一步地找到大O和大T(n),那将非常有帮助。谢谢你抽出时间 for (int i = 0; i < n; i++) for (int j = 0; j < i * i; j++) cout

我目前正在做一些关于大O和T(n)的家庭作业,遇到了一些问题。我已经像我的教授所说的那样插入了数字,并且计算出了每个循环运行的次数,但是我不知道如何从这些信息中推导出t(n)和大O。我浏览了整个网站,但似乎找不到任何帮助。这是一些没有分配的问题,但与我正在努力解决的分配问题非常相似

如果你能一步一步地找到大O和大T(n),那将非常有帮助。谢谢你抽出时间

for (int i = 0; i < n; i++)
 for (int j = 0; j < i * i; j++)
 cout << j << endl;

i=1 runs 1 time
i=2 runs 4 times
i=3 runs 9 times
i=4 runs 16 times

for (int i = n; i >= 0; i -= 2)
 cout << i << endl;

n=10 runs 6 times
n=8 runs 5 times
n=6 runs 4 times
n=4 runs 3 times
n=2 runs 2 times

for (int i = 0; i < n; i++)
 for (int j = i; j > 0; j /= 2)
 cout << j << endl; 

i=16 runs 5 times
i=8 runs 4 times
i=4 runs 3 times
i=2 runs 2 times
for(int i=0;icout这些都是非常简单的情况,您所要做的就是计算迭代次数

让我们看第一个:

for (int i = 0; i < n; i++)
 for (int j = 0; j < i * i; j++)
   cout << j << endl;

对于其他两个,只需遵循相同的方法即可。第二个是琐碎的(
}(n)
),尽管第三个稍微有趣(
O(n)lg n)

你的意思是θ(n)
?@Barmar很可能不是
T(n)
表示对大小问题执行算法的时间
n
。它是一种常用于描述递归算法的符号。例如,
T(n)=2*T(n/2)+c
意味着您可以通过将
n
问题拆分为两个大小为一半的问题加上一些恒定的时间来解决它,例如计算中间或其他问题。用于获取算法的
O
0^2 + 1^2 + 2^2 + ... + (n-1)^2
= (n-1)(n)(2n-1)/6  // it helps to just know the formula for sums of squares
= Ө(n^3)            // just drop all the constants