Big o 查找伪代码的大O

Big o 查找伪代码的大O,big-o,Big O,代码如下: y = 0 for j=0 to n: for k=0 to (j*n): y+=2 我的逻辑是,给定已知的从0到n的i和的解,内部for循环将有这个求和,其中n(n+1)/2: 然后,这个内部循环将从j=0循环到n,通过这个逻辑,我可以从0到n求和: ( (n(n+1)/2) * n)((n(n+1)/2) * n + 1) / 2 其中,I为(n(n+1)/2)的子j。在做了乘法之后,我得到了 O(n^6) 我不知道我的逻辑是否正确,或者我是否遗漏了什么,因

代码如下:

y = 0
for j=0 to n:
  for k=0 to (j*n):
     y+=2
我的逻辑是,给定已知的从0到n的i和的解,内部for循环将有这个求和,其中n(n+1)/2:

然后,这个内部循环将从j=0循环到n,通过这个逻辑,我可以从0到n求和:

( (n(n+1)/2) * n)((n(n+1)/2) * n + 1) / 2 
其中,I为(n(n+1)/2)的子j。在做了乘法之后,我得到了

O(n^6)

我不知道我的逻辑是否正确,或者我是否遗漏了什么,因为这个数字似乎很大。谢谢。

我们可以进行信封背面的计算

j
的范围从
0
n
。因此,
j
的最大值是
n
。这是内部循环最糟糕的情况

因此,内部循环的绝对最坏情况是如果
j==n
,在这种情况下,循环有
j*n==n*n==n²
迭代

也就是说,在绝对最坏的情况下,内部循环将进行
迭代。反过来,外循环有
n
迭代,这意味着我们高估的绝对最坏情况上限是
O(n³)
。再糟糕不过了。事实上,我们通过假设
j*n==n²
高估了,所以我们知道它肯定小于

现在,我们可以试着找到一个更精确的界限。事实上,我们可以找到精确的迭代次数,我们甚至不需要Bachmann-Landau符号


假设循环边界是互斥的,则内部循环中的语句将执行
(n³-n²)/2次
,而
y
将执行
n³-n²
。(沃尔夫拉姆·阿尔法说。)

我们可以做一个信封背面的计算

j
的范围从
0
n
。因此,
j
的最大值是
n
。这是内部循环最糟糕的情况

因此,内部循环的绝对最坏情况是如果
j==n
,在这种情况下,循环有
j*n==n*n==n²
迭代

也就是说,在绝对最坏的情况下,内部循环将进行
迭代。反过来,外循环有
n
迭代,这意味着我们高估的绝对最坏情况上限是
O(n³)
。再糟糕不过了。事实上,我们通过假设
j*n==n²
高估了,所以我们知道它肯定小于

现在,我们可以试着找到一个更精确的界限。事实上,我们可以找到精确的迭代次数,我们甚至不需要Bachmann-Landau符号


假设循环边界是互斥的,则内部循环中的语句将执行
(n³-n²)/2次
,而
y
将执行
n³-n²
。(Wolfram Alpha说。)

看起来更像O(n³)@willystyle:好眼睛。在我的回答中,我证明了计算实际迭代次数实际上非常简单,不需要使用Bachmann-Landau表示法来近似,确切的数字是
y+=2
语句的(n³-n²)/2次求值。我们可以说这是三个操作(获取当前值、添加2、写回新值),因此操作总数是1.5*(n³-n²),而
y
的最终值是n³-n²。看起来更像O(n³)@willystyle:Good eye。在我的回答中,我证明了计算实际迭代次数实际上非常简单,不需要使用Bachmann-Landau表示法来近似,确切的数字是
y+=2
语句的(n³-n²)/2次求值。我们可以说这是三个操作(获取当前值、添加2、写回新值),因此操作总数是1.5*(n³-n²),而
y
的最终值是n³-n²。谢谢!这确实帮助我理解了问题/解决方案。谢谢!这确实帮助我理解了问题/解决方案。
O(n^6)