立方阶时间复杂度怎么算-征战沙场- 第326篇

关历史文章(阅读本文前,您可能需要先看下之前的系列👇

国内最全的Spring Boot系列之三

2020上半年发文汇总「值得收藏」

程序CPU占用率飙升,如何定位线程的堆栈信息?「超详细,值得收藏」看不懂还有配套视频 - 第319篇

「工作流Activiti」介绍-新手上路,注意安全 - 第320篇

「Activiti精品 悟纤出品」activiti介绍-十万个为什么 - 第321篇

「Activiti精品 悟纤出品」Activiti6 Getting Started- 稳扎稳打 - 第322篇

「Activiti精品 悟纤出品」Activiti7 Getting Started-摸石头过河 - 第323篇

「Activiti精品 悟纤出品」流程模型搭建-小试牛刀 - 第324篇

「Activiti精品 悟纤出品」基于mysql初始化「图图为啥消失了」- 第325篇

 

悟纤:师傅,时间复杂度咱们之前不是学习过了嘛,怎么又来一遍了,你这是不是这两天没有备课要偷懒呢。

师傅:师傅不是要偷懒,我就问你这个变形的三层for循环这个执行的次数是多少,你能算出来嘛?

悟纤:师傅,你这是没事找事做吧。

师傅:这不粉丝留言“在for循环里面第一层是i<=n,第二层是j<=j,第三层是k<=j“。

悟纤:粉丝的问题吗,那是要好好对待,不可马虎呐。

师傅:话说你不是经常能说会道的,你会嘛?

悟纤:弟子才疏学浅,不敢在师傅目前班门弄斧,还是师傅您来。

师傅:哎,不懂不可怕,可怕的是不懂装懂呐。

悟纤:弟子受教了,请师傅赐教。

师傅:那为师你好好给你讲解下。

 

 

前言

       有一个网友在知乎留言:

https://zhuanlan.zhihu.com/p/87754009

「关注SpringBoot公众号不迷路」

       本文会采用进阶式的讲解方式,从一阶到三阶,在到3阶的变形。

       对于时间复杂度是怎么回事,还不懂的话,请先阅读《烦不烦,别再问我时间复杂度了:这次不色,女孩子进来吧 - 第281篇》:

https://mp.weixin.qq.com/s/F1HLfWkYok4D633OpcLjwA

 

一、一阶的时间复杂度

       一节的应该是非常的简单的,为了文章的完整性,我们还是简单的看下代码:

 /**
   * 一阶的例子
   * @author 悟纤「公众号SpringBoot」
   * @param n
   */
  public static void test1(int n) {
      int count = 0;
      for(int i=1;i<=n;i++) {
        count++;
      }
     System.out.println(count);
  }

      一层for循环,n等于多少就循环多少次,那么可以得知时间频度:

T(n)=n

       那么时间复杂就是:O(n)

二、二阶的时间复杂度

       我们看下二阶的小栗子:

/**
   * 二阶的例子
   * @author 悟纤「公众号SpringBoot」
   * @param n
   */
  public static void test2(int n) {
      int count = 0;
      for(int i=1;i<=n;i++) {
        for(int j=1;j<=n;j++) {
          count++;
        }
      }
     System.out.println(count);
  }

 

 

       双层for循环的执行的次数就是n*n次。那么时间复杂度就是O(n²)

 

三、三阶的时间复杂度(立方阶)

3.1最基本的立方阶

       最简单的立方阶就是三层for循环了:

/**
   * 三阶的例子
   * @author 悟纤「公众号SpringBoot」
   * @param n
   */
  public static void test3(int n) {
      int count = 0;
      for(int i=1;i<=n;i++) {
        for(int j=1;j<=n;j++) {
          for(int k=1;k<=n;k++) {
            count++;
          }
        }
      }
     System.out.println(count);
  }

    这个正常的立方阶for循环的次数就是n*n*n,那么时间复杂度也就是O(n3)。

 

3.2变形立方阶

       变形的立方阶就是在这个for循环的次数,内层for循环和外层for循环是有关系的,直接上代码看下:

/**
   * 三阶的例子-变形
   * @author 悟纤「公众号SpringBoot」
   * @param n
   */
  public static void test4(int n) {
      int count = 0;
      for(int i=1;i<=n;i++) {
        for(int j=1;j<=i;j++) {
           for(int k=1;k<=j;k++) {
             count++;
           }
        }
      }
     System.out.println(count);
  }

       这里这里和前面的基本的例子不一样的地方就是在内层for循环的时候,j之前是j<=n,现在是和外层的i有关系是j<=i; 对于k的话之前是k<=n,现在是k<=j

       这个乍一看还看不出来时间复杂度是多少,所以我们需要进行推导一下,怎么推导呐,具体的推导过程还不懂,那你得好好看看《烦不烦,别再问我时间复杂度了:这次不色,女孩子进来吧 - 第281篇》。

       通过时间复杂度的一个推演过程,我们知道我们要先计算一下时间频度:T(n)

       直接看帅气的纸质推演过程:

 

       这里上面的推演过程已经写得很清楚了,执行的次数:

n(n+1)(n+2) / 6

时间复杂度就是O(n3)

 

我就是我,是颜色不一样的烟火。
我就是我,是与众不同的小苹果。

 

à悟空学院:https://t.cn/Rg3fKJD

学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!

SpringBoot视频:http://t.cn/A6ZagYTi

Spring Cloud视频:http://t.cn/A6ZagxSR

SpringBoot Shiro视频:http://t.cn/A6Zag7IV

SpringBoot交流平台:https://t.cn/R3QDhU0

SpringData和JPA视频:http://t.cn/A6Zad1OH

SpringSecurity5.0视频:http://t.cn/A6ZadMBe

ShardingJDBC分库分表:http://t.cn/A6ZarrqS

分布式事务解决方案:http://t.cn/A6ZaBnIr

JVM内存模型调优实战:http://t.cn/A6wWMVqG

Spring入门到精通:https://t.cn/A6bFcDh4

 

 

悟纤 CSDN认证博客专家 知远公司创始人 架构师 访问1000万+
「公众号SpringBoot」:
①阿里巴巴前高级研发工程师;
②估值20亿美金的Blued架构师;
③北京知远公司创始人;
④浙江甄才公司架构师;
⑤云课堂学员10000+;
⑥博客访问量1000万+;
⑦10年互联网行业从业;
⑧360万的访问《从零开始学SprngBoot》作者;
⑨技术加盟多个独立项目。
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页
实付 19.89元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值