C++ 循环的大O和θ for(int i=2;i

C++ 循环的大O和θ for(int i=2;i,c++,for-loop,time-complexity,big-o,C++,For Loop,Time Complexity,Big O,我真的很困惑n*n和i*i是如何相互影响的 我的假设是O(n^2logn) 但是我真的不知道如何推导它,我有点脱离了我的基础知识,所以对下面的内容持保留态度 对于原始主题: 迭代器形成系列2、22、222、2222… 这被称为。 四分法有两个反函数,即上根和下根。后者在这里是相关的,因为我们有外循环的slog2(n2)迭代 但我认为这不是必须的。最后我们要做的是总结内部循环的步骤,除了最后一个总结的步骤,所有这些步骤加起来都比最后一个要少,因为四分之一以极高的速度增长(如果我们只将值加倍,它已经

我真的很困惑
n*n
i*i
是如何相互影响的 我的假设是O(n^2logn)
但是我真的不知道如何推导它,我有点脱离了我的基础知识,所以对下面的内容持保留态度

对于原始主题:

迭代器形成系列2、22、222、2222…
这被称为。
四分法有两个反函数,即上根和下根。后者在这里是相关的,因为我们有外循环的slog2(n2)迭代

但我认为这不是必须的。最后我们要做的是总结内部循环的步骤,除了最后一个总结的步骤,所有这些步骤加起来都比最后一个要少,因为四分之一以极高的速度增长(如果我们只将值加倍,它已经成立)。这给了我们一个因子2,我们可以在Landau符号中忽略它。
因此,重要的是只有最后一个内环,它由n2绑定。这是一个上限(总共少于2n2个内部步骤),同时也是一个下限,假设n2实际被击中。因此,我的答案是Θ(n2),但我不确定我在思考过程中是否犯了错误。
如果能有另一种意见,比如有人在这里评论我是对的还是错的,那就太好了

编辑:根据SomeWittyUsername的评论,这里是一个粗略的证据草案:

让我们通过
f(t),t=1..t_max
来表示迭代器
i
经历的序列

首先,我们每个步骤都有
f(t)>=2
,因为它是这样初始化的,并且只会增加


对于外循环的第t次迭代,内循环有f(t)次迭代。因此,总的步骤是
sum(t=1..t_max)f(t)看起来不错,但我认为“所有保存最后一个汇总的步骤的总和小于最后一个”这句话需要证明。@SomeWittyUsername添加了一个粗略的草稿作为证明。看起来不错。我冒昧地用乳胶重写了计算,因为它很难阅读。希望没有问题,因为O()和θ()都是函数集,而O()是存在常数的函数集,因此对于足够大的输入,所有执行都需要更长的时间(这是一个简化),您可以直接使用一个直观的大函数来表示O(n)。另一方面,θ()要求函数也是一个下限,所以这更难。O(nˆ3)似乎很容易证明。我的大脑太虚弱了,所以我不能帮助θ()。
for(int i = 2; i < n*n; i = i*i)
    for(int j = 1; j < i; j++)