Algorithm 具有相依指数的三重嵌套大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+…)=

我正在寻找这个问题的大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+…)=sum_{k=1}^n(n-k^2),但我不确定从那里开始


任何关于如何进行的建议都将非常好

j
大于sqrt(n)时,不进入内部循环。当
i
大于sqrt(n)时也是如此,因为
j
i
开始

因此,我们可以将已完成的工作分为两种情况:

  • 在迭代中,
    i
    和/或
    j
    大于
    sqrt(n)
    :不进入
    k
    循环,并且不难证明外部两个循环的时间复杂度为θ(n^2)
  • i
    j
    都小于
    sqrt(n)
    的迭代中:前两个循环每次运行
    sqrt(n)
    次,最后一个循环运行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)
次,小于第二个循环运行的次数。