Algorithm 如何确定这个嵌套for循环的时间复杂度

Algorithm 如何确定这个嵌套for循环的时间复杂度,algorithm,Algorithm,我想计算这个嵌套for循环的复杂性: for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { for (int k = j + 1; k < n; k++) { //do something here } } } for(int i=0;i

我想计算这个嵌套for循环的复杂性:

for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
        for (int k = j + 1; k < n; k++) {
            //do something here
        }
    }
}
for(int i=0;i

如何计算复杂性?

到达内部循环体的次数是多少

这将选择[0,n](i,j,k)中3个元素的每个组合

其中有n*(n-1)*(n-2)/3!=(n^3-3n^2+2n)/6个

这个问题的复杂性是O(n^3)

  • 实际上,这三个for循环是获得所有循环数的好方法 选择n个元素中的3个元素的不同组合
  • 它 等于C(n,3)和C(n,i)->O(n^i)
  • 所以答案是O(n^3)。

很简单:有3个循环,每个循环的时间复杂度平均为O(n)


所以它是O(n^3)。

如果你不把它当作一个组合问题来处理呢?你能想到其他可以使用的地方吗?