Algorithm 具有相依指数的三重嵌套大O
我正在寻找这个问题的大O,而我在第三个嵌套循环中遇到了困难。这是密码Algorithm 具有相依指数的三重嵌套大O,algorithm,time-complexity,big-o,Algorithm,Time Complexity,Big O,我正在寻找这个问题的大O,而我在第三个嵌套循环中遇到了困难。这是密码 for (int i = 1 to n) for (int j = i to n) for (int k = j*j to n) //some constant operation i forloop显然是O(n) 正循环的j为(n+n-1+n-2+…+2+1)=(n-1)n/2=O(n^2) 但是我不确定如何考虑K-FoLoo.我知道对于j(1到n)的一个完整循环,求和是(n+n-4+n-6+…)=
for (int i = 1 to n)
for (int j = i to n)
for (int k = j*j to n)
//some constant operation
i forloop显然是O(n)
正循环的j为(n+n-1+n-2+…+2+1)=(n-1)n/2=O(n^2)
但是我不确定如何考虑K-FoLoo.我知道对于j(1到n)的一个完整循环,求和是(n+n-4+n-6+…)=sum_{k=1}^n(n-k^2),但我不确定从那里开始
任何关于如何进行的建议都将非常好 当
j
大于sqrt(n)时,不进入内部循环。当i
大于sqrt(n)时也是如此,因为j
从i
开始
因此,我们可以将已完成的工作分为两种情况:
- 在迭代中,
和/或i
大于j
:不进入sqrt(n)
循环,并且不难证明外部两个循环的时间复杂度为θ(n^2)k
- 在
和i
都小于j
的迭代中:前两个循环每次运行sqrt(n)
次,最后一个循环运行n次,因此总迭代次数的上限为sqrt(n)
O(sqrt(n)*sqrt(n)*n)=O(n^2)
在这两种情况下,上界都是O(n^2),第一种情况表明它也是一个下界。因此,总时间复杂度为θ(n^2)。我认为您建议的总和是错误的。你说它应该是
(n+(n-4)+(n-6)+……
,但它应该是(n-9)
,而不是(n-6)
。提示:你能降低j
循环的上限而不改变由此产生的大O复杂度吗?这似乎是有道理的,但是当运行一个程序来测试我在k循环中的次数时,我得到的东西远远低于理论极限。例如,我得到了一个数量级较低的计划与理论。可以吗?为什么会发生这种情况?@GentleSaint次数并不意味着什么,因为在大O中有一个常数因子。但是如果你取一个大n,检查n和2n的迭代次数,你应该看到它大约是2n的4倍。是的,这更有意义。非常感谢你!第三个循环正好运行1*(n-1*1+1)+2*(n-2*2+1)+3*(n-3*3+1)+……+楼层(sqrt(i))*(n-i*i+1)
次,小于第二个循环运行的次数。