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²
迭代。反过来,外循环有n
迭代,这意味着我们高估的绝对最坏情况上限是O(n³)
。再糟糕不过了。事实上,我们通过假设j*n==n²
高估了,所以我们知道它肯定小于n³
现在,我们可以试着找到一个更精确的界限。事实上,我们可以找到精确的迭代次数,我们甚至不需要Bachmann-Landau符号
假设循环边界是互斥的,则内部循环中的语句将执行
(n³-n²)/2次,而y
将执行n³-n²
。(沃尔夫拉姆·阿尔法说。)我们可以做一个信封背面的计算
j
的范围从0
到n
。因此,j
的最大值是n
。这是内部循环最糟糕的情况
因此,内部循环的绝对最坏情况是如果j==n
,在这种情况下,循环有j*n==n*n==n²
迭代
也就是说,在绝对最坏的情况下,内部循环将进行n²
迭代。反过来,外循环有n
迭代,这意味着我们高估的绝对最坏情况上限是O(n³)
。再糟糕不过了。事实上,我们通过假设j*n==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)