【求解思路】计算三层for循环的时间复杂度

独自空忆成欢 提交于 2019-12-18 07:46:22

求划线部分的执行次数为               
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                for (int k = 1; k <= j; k++) {
                    x=x+y;
                }
            }
        }

 对于这类问题,直接列出最外层的前几项执行次数:
 

①对于i=1,执行次数是1次

②对于i=2,执行次数是1+2次

③对于i=3,执行次数是1+2+3次
所以可以总结出规律,对于n取多少,执行次数 = 

即有      


             

注意:这里用了两个数列的数学运算公式


所以执行次数(空间复杂度):

 

这里对该问题进行一个扩展,即将最内部第三层循环的初始化变量k改为0进行求解:

求划线部分的执行次数为               
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                for (int k = 0; k <= j; k++) {
                    x=x+y;
                }
            }
        }

相应的执行次数也改变了,还是列出前几项的执行次数:

①对于i=1,执行次数是1+2-1次

②对于i=2,执行次数是1+2+3-1次

③对于i=3,执行次数是1+2+3+4-1次
所以可以总结出规律,对于n取多少,执行次数 = 

即有      


             

所以执行次数(空间复杂度):

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!