C++ 大O和T(n)混淆
我目前正在做一些关于大O和T(n)的家庭作业,遇到了一些问题。我已经像我的教授所说的那样插入了数字,并且计算出了每个循环运行的次数,但是我不知道如何从这些信息中推导出t(n)和大O。我浏览了整个网站,但似乎找不到任何帮助。这是一些没有分配的问题,但与我正在努力解决的分配问题非常相似 如果你能一步一步地找到大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
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;i cout这些都是非常简单的情况,您所要做的就是计算迭代次数
让我们看第一个:
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