时间复杂度高级

简介: 时间复杂度高级

实例4:

计算bubbleSort的时间复杂度?

   void bubbleSort(int[] array) {

       for (int end = array.length; end > 0; end--) {

         boolean sorted = true;

         for (int i = 1; i < end; i++) {

           if (array[i - 1] > array[i]) {

             Swap(array, i - 1, i);

             sorted = false;

          }

        }

         if (sorted == true) {

           break;

        }

      }

   }

🛸🛸解答:

这里就要用到我们的最好情况和最坏情况了,我们可以发现冒泡排序最好的情况下是执行了N次,即数组是有序的,只要遍历到每一个元素即可;那么最坏的情况就是数组是倒序的,那么第一个元素就要和每个其余的元素相比较,比较次数是n-1  第二个元素比较次数就是N-2 ……依次到最后比较一次,那么总共的比较次数就是1+2+……+(n-1)次,根据等差数列求和得最后的次数为

(N*(N-1))/2;在根据大O阶推导法,所以fun4的时间复杂度就是O(n^2);

实例5:

计算阶乘递归factorial的时间复杂度?

   long factorial(int N) {

   return N < 2 ? N : factorial(N-1) * N;

   }

🚛🚛解答:

我们可以发现基本操作递归了N次,根据递归的时间复杂度= 递归的次数*每次递归执行的次数

——>时间复杂度为O(N)。

实例6:

计算斐波那契递归fibonacci的时间复杂度?

   int fibonacci(int N) {

   return N < 2 ? N : fibonacci(N-1)+fibonacci(N-2);

   }

🚐🚐解答:

这一题是求斐波那契数列第n项的值,我们可以发现当我们要求第n项的值时,我们需要知道第n-1项和n-2项的值,而要求的第n-1项的值,我们需要求出n-2项的值,如此下去,我们可以发现,基本操作呈现二叉树的形式分布,最后可以推导出fibonacci()的时间复杂度为O(2^N);

774f999a0f404c4bb57e24b9a8d859ed.png二、空间复杂度

🚚🚚上面已经提到,空间复杂度是对一个算法在运行过程中临时占用多少内存空间大小的量度,那么我们的空间复杂度也是用大O渐进表示法!

下面我们看几个实例:

实例1:计算bubbleSort的空间复杂度?

   void bubbleSort(int[] array) {

     for (int end = array.length; end > 0; end--) {

       boolean sorted = true;

       for (int i = 1; i < end; i++) {

         if (array[i - 1] > array[i]) {

           Swap(array, i - 1, i);

           sorted = false;

        }

      }

       if (sorted == true) {

         break;

      }

🚔🚔解答:

可以发现我们的函数参数传进来一个数组array(实际上传的是array首元素的地址),我们在函数的执行过程中并没有开辟新的空间,所以空间复杂度为O(1)。

实例2:计算fibonacci的空间复杂度?

   int[] fibonacci(int n) {

     long[] fibArray = new long[n + 1];

     fibArray[0] = 0;

     fibArray[1] = 1;

     for (int i = 2; i <= n ; i++) {

     fibArray[i] = fibArray[i - 1] + fibArray [i - 2];

    }

     return fibArray;

   }

🚲🚲解答:这里我们在计算斐波那契数列第n项的值时动态开辟了N个空间,所以空间复杂度为 O(N)。

实例3:计算阶乘递归Factorial的空间复杂度?

   long factorial(int N) {

   return N < 2 ? N : factorial(N-1)*N;

   }

🛵🛵解答:根据我们的时间复杂度已经计算过的,我们可以了解到递归调用了N次,所以开辟了N个栈帧,每个栈帧使用了常数个空间,所以空间复杂度为O(N),即可以理解为当我们的n-1 在执行完毕的时候会释放栈空间,这个时候在执行右边的n-2,所以最终开辟的空间大小以最深的来理解,如图蓝色箭头所示,即为N.

2cc17dc4d3a54915ae5332321188ae0e.png


相关文章
|
网络协议 定位技术
网络七层协议地图,报文格式一览无遗。绝对是干货,值得收藏
网络七层协议地图,报文格式一览无遗。绝对是干货,值得收藏
664 0
网络七层协议地图,报文格式一览无遗。绝对是干货,值得收藏
|
计算机视觉
YOLOv5改进 | 检测头篇 | 增加辅助检测头利用AFPN改进Head(附详细修改教程)
YOLOv5改进 | 检测头篇 | 增加辅助检测头利用AFPN改进Head(附详细修改教程)
984 0
|
算法 测试技术 调度
【调度算法】DTLZ问题家族
【调度算法】DTLZ问题家族
477 1
|
SQL 关系型数据库 数据库连接
ClickHouse(20)ClickHouse集成PostgreSQL表引擎详细解析
ClickHouse的PostgreSQL引擎允许直接查询和插入远程PostgreSQL服务器的数据。`CREATE TABLE`语句示例展示了如何定义这样的表,包括服务器信息和权限。查询在只读事务中执行,简单筛选在PostgreSQL端处理,复杂操作在ClickHouse端完成。`INSERT`通过`COPY`命令在PostgreSQL事务中进行。注意,数组类型的处理和Nullable列的行为。示例展示了如何从PostgreSQL到ClickHouse同步数据。一系列的文章详细解释了ClickHouse的各种特性和表引擎。
602 0
|
存储
【洛谷 P2437】蜜蜂路线 题解(递归+记忆化搜索+高精度)
蜜蜂路线问题:蜜蜂从蜂房$m$到$n$($m&lt;n$)按数字递增爬行。给定$m$和$n$,求路线数。示例:$m=1$,$n=14$,输出$377$。100%数据$1\leq m,n\leq1000$。使用斐波那契序列优化,高精度处理大数。代码实现斐波那契存储并动态规划求解。
343 0
|
运维 负载均衡 安全
slb传统硬件负载均衡器的性能瓶颈
【11月更文挑战第3天】
394 4
|
运维 前端开发 算法
阿里及各大企业中台架构详解(上)
阿里及各大企业中台架构详解
1691 0
阿里及各大企业中台架构详解(上)
|
人工智能 监控 供应链
智能电网:能源管理的智能化
【10月更文挑战第18天】智能电网是基于先进通信和信息技术的新型电力系统,通过自动化、互联互通和智能化管理,实现能源的高效利用和优化调度。本文探讨了智能电网在分布式能源管理、储能技术、智能计量与监控、人工智能与大数据分析等方面的应用,展望了其未来的发展趋势,包括虚拟电厂、能源互联网和数字化转型等。智能电网正引领能源管理的革命,为可持续发展贡献力量。
|
人工智能 算法 测试技术
AI视频理解天花板,全新MiniGPT4-Video刷爆SOTA!
【4月更文挑战第10天】KAUST和哈佛大学联合研发的MiniGPT4-Video模型在视频理解任务中打破多项纪录,成为业界关注点。这款多模态AI系统基于大型语言模型,能同时处理视觉和文本信息,提升了视频内容理解的深度。通过创新的视觉-文本混合处理,模型在MSVD、MSRVTT等基准测试中取得显著性能提升。然而,由于依赖上下文窗口,目前对较长视频处理有限制。该模型的出现推动了视频理解领域的进步,具有广阔的应用前景。
381 1
AI视频理解天花板,全新MiniGPT4-Video刷爆SOTA!