了解嵌套循环将运行多少次

Dan*_*cco 6 complexity-theory big-o

我试图理解在下面的代码中执行语句"x = x + 1"多少次,作为"n"的函数:

for (i=1; i<=n; i++)
  for (j=1; j<=i; j++)
    for (k=1; k<=j; k++)
       x = x + 1 ;
Run Code Online (Sandbox Code Playgroud)

如果我没有错,第一个循环执行n次,第二个循环执行n (n + 1)/ 2次,但在第三个循环中我丢失了.也就是说,我可以计算它将被执行多少次,但我似乎无法找到公式或用数学术语解释它.

你能?

顺便说一下,这不是家庭作业或任何东西.我刚刚在一本书上找到并认为这是一个有趣的概念.

ham*_*mar 14

考虑循环for (i=1; i <= n; i++).看到这个循环n次是微不足道的.我们可以将其绘制为:

* * * * *
Run Code Online (Sandbox Code Playgroud)

现在,当你有两个这样的嵌套循环时,你的内循环将循环n(n + 1)/ 2次.注意这是如何形成一个三角形,事实上,这种形式的数字被称为三角形数字.

* * * * *
* * * *
* * *
* *
*
Run Code Online (Sandbox Code Playgroud)

因此,如果我们将其扩展到另一个维度,它将形成一个四面体.由于我不能在这里做3D,想象每一个都是彼此叠加的.

* * * * *     * * * *     * * *     * *     *
* * * *       * * *       * *       *
* * *         * *         *
* *           *
*
Run Code Online (Sandbox Code Playgroud)

这些被称为四面体数,由以下公式产生:

n(n+1)(n+2)
-----------
     6
Run Code Online (Sandbox Code Playgroud)

你应该能够确认一个小的测试程序确实是这种情况.

如果我们注意到6 = 3!,不难看出这种模式如何推广到更高的维度:

n(n+1)(n+2)...(n+r-1)
---------------------
         r!
Run Code Online (Sandbox Code Playgroud)

这里,r是嵌套循环的数量.