【时间复杂度与空间复杂度】衡量算法的标准,这篇文章让大家更深刻的理解时间复杂度和空间复杂度

news2024/11/19 0:24:52

前言:
大家好,我是良辰丫,今天和大家一起讨论一下时间复杂度与空间复杂度,往往来说,这两者是衡量算法好坏的标准,举个简单的例子,你想吃核桃了,用牙能弄开,用夹子也能弄开,但是用工具效率更高一些,于是乎,为了研究算法的效率,计算机领域的科学家们引入了时间复杂度和空间复杂度,那么这二者到底是什么呢?我们接下来往下看。🚀🚀🚀

🧑个人主页:良辰针不戳
📖所属专栏:java数据结构
🍎励志语句:生活也许会让我们遍体鳞伤,但最终这些伤口会成为我们一辈子的财富。
💦期待大家三连,关注,点赞,收藏。
💌作者能力有限,可能也会出错,欢迎大家指正。
💞愿与君为伴,共探Java汪洋大海。


目录

  • 1、衡量算法的标准
  • 2、时间复杂度
  • 3、空间复杂度


1、衡量算法的标准

所谓算法,是解决问题的思路,比如高斯,从1加到100,一个一个加也能算出来,然后用高斯的公式也能算出来,然而呢,很显然,一个一个加效率显然不高。随着时间推移,计算机科学家们退出了两种衡量算法的标准,时间效率和空间效率,也就是我们口中的时间复杂度和空间复杂度。

  • 程序的运行时间。(时间复杂度)
  • 程序运行所需内存空间的大小。(空间复杂度)

2、时间复杂度

有的小伙伴可能会疑惑了,同样的程序在不同的电脑上,由于网速,电脑显卡好坏,CPU运行速率等因素,程序所运行的时间不一样,那么怎么才能计算时间呢?科学家们想出来了先分别计算程序中每条语句的执行次数,然后用总的执行次数间接表示程序的运行时间。

一些时间复杂度图

在这里插入图片描述

注意:

  • 通常情况下我们说的时间复杂度是最坏情况下的时间复杂度,如果研究最好情况下,那没有意义。
  • 我们描述时间复杂度用大O渐进表示法,比如O(n)。

接下来我们通过几个例子更深刻认识一下时间复杂度。

  1. 下面代码执行了n次,我们就说它的时间复杂度为O(n)。
for(int i = 0 ; i < n ; i++)     // 从 0 到 n,执行 n+1 次
{
      System.out.println("叶良辰");  // 从 0 到 n-1,执行 n 次
}
  1. 下面代码执行了n+520次,我们可以说它的时间复杂度为O(n + 520),但是呢,当n趋近于无穷大的时候,520又显得很渺小,我们通常记做O(n),因此呢,n后面有常数项,直接省略就可以。
for(int i = 0 ; i < n + 521 ; i++)     
 {
      System.out.println("叶良辰");  
 }
  1. 下面代码大约执行了2 * n 次,我们把它记做 O(2n),一般而言,当变量n前面有系数时我们不记录系数,n无穷大时,n和2n也就不会划分那么细了,因此呢,我们把它记为O(n)。
for(int i = 0 ; i < 2 * n ; i++)
 {
      System.out.println("叶良辰");
 }
  1. 如果遇到了常数次数,我们直接记为O(1)就可以了。
for(int i = 0 ; i < 521 ; i++)
{
    System.out.println("叶良辰");
 }
  1. 下面的运行次数为m + n 次,有的小伙伴可能就会说了,我们记做 O(m) 或者 O(n) 不是都行嘛?大家可以这样想,把n和m当成一个整体,他们两个合起来可能才趋近于无穷,因此呢,大家特别关注一下这个,时间复杂度为O(m + n)。
for(int i = 0 ; i < m + n ; i++)
{
      System.out.println("叶良辰");
}
  1. 函数中含有相同变量,并且含有常数时,只保留最高阶变量。下面的时间复杂度就是n * n。
for(int i = 0 ; i < n * n + n + 5; i++)
{
      System.out.println("叶良辰");
}

小结:

  • 函数中含有相同变量,并且含有常数时,只保留最高阶变量。
  • 用O(1)表示运行次数为常数的时间复杂度。
  • 变量的系数通常省略,例如2 * n * n时间复杂度为O(n * n)。

3、空间复杂度

鱼和熊掌不可兼得,时间复杂度和空间复杂度往往不可能全部做到最优,我们常常采用空间效率换时间效率,如果省下了空间,然而时间很慢,比如你上网玩游戏,空间内存做到最优了,但是时间很慢,那么游戏就会显得特别卡,我并不是说空间效率不重要,比起时间效率,空间效率显得更逊色。但是呢,我们还是需要去理解一下空间效率。

空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度 。空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。空间复杂度计算规则基本跟时间复杂度类似,也使用大O渐进表示法。

通过例子简单说明一下空间复杂度。

  1. 下面只有一个变量,我们就可以说它的空间复杂度为O(1)。
     int num = 520;
     System.out.println(num);
  1. 下面为求n的阶乘代码,函数没开辟一次栈帧,就需要开辟一次空间,因此呢递归一次开辟一次空间,该代码的空间复杂度为O(n)。
long factorial(int N) {
   return N < 2 ? N : factorial(N-1)*N;
}

后序:
读了这篇文章,想必大家对时间复杂度和空间复杂度有了一定的了解,期待大家的点赞三连,我们下次再见。💞💞💞

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/149208.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAP灵活工作流场景配置及Demo测试

首先确保对应流程模板处于激活状态,并且事件已经激活 1. 在Fiori app 管理工作流中配置流程场景 地址&#xff1a;/sap/bc/ui2/flp?sap-client100&sap-languageZH#Workflow-showList 选择创建的灵活工作流模板&#xff0c;点击添加&#xff0c;开始配置场景 维护基本属性及…

JavaSE学习day2_02, IDEA的使用(重点)

4. idea 4.1 什么是idea&#xff1f; 是Java的集成开发工具&#xff0c;该工具把编写代码&#xff0c;编译&#xff0c;运行&#xff0c;调试等都集中在一起了。目前绝大多数企业编程用的执行环境. 特点&#xff1a; 自动保存、自动编译。 我们在使用的时候主要注重于两步…

SpringCloud微服务!!

目录 1.系统架构的演变 2.微服务简介 1.什么是微服务&#xff1f; 2.实现微服务的技术方案有哪些&#xff1f; 3.什么是SpringCloud? 4.微服务技术点【重点】 4.1服务治理、服务注册、服务发现 4.2 Eureka注册中心 4.2.1 Eureka介绍 4.2.2 Eureka 使用入门 4.2.3 Eureka的…

13_1、Java的IO流之File类的使用

一、File类的理解1、File的对象代表着一个文件或者一个文件目录。2、File类在java.io包下。3、File类中涉及文件或文件目录相关的创建、删除、重命名、修改时间、文件大小等方法&#xff0c;并未涉及到对文件内部的内容的读取、写入等操作&#xff0c;如果需要对文件的内容进行…

2023年玩兔年小游戏《兔兔保卫萝卜战》赢新年祝福「钱兔无量」

PS&#xff1a;粉丝可以免费领源码&#xff0c;私信我或者评论666即可~~~~~~~~ 导读 | 世界杯虽已闭幕&#xff0c;但其带给我们的精彩&#xff0c;仿佛就在昨天&#xff0c;想一想&#xff0c;还是有一种爽劲&#xff0c;不知道大家是否也这样&#xff1f;转眼就到了2023年&a…

Java框架:Mybatis

文章目录一、Mybatis概述1.1概念1.2优点与缺点1.3MyBatis和Hibernate的区别1.4Mybatis的核心对象1.5Mybatis执行流程三、Mybatis的快速使用3.1开发环境3.2 创建一个maven项目3.3添加Maven依赖3.4MySQL创建user表3.5创建数据源database.properties文件3.6编写mybatis-config.xml…

H13-531云计算HCIE V2.0——1~400常错题和知识点总结

1~100 35、FusionStorage Block无法是被配置RAID的磁盘,一定要将RAID信息删除后, Fusionstrage block才能识别到这些磁盘? 错误 61、Ceilometer监控通过在计算节点部署Compute服务 84.&#xff08;多选&#xff09;在配置 FusionSphere OpenStack 时&#xff0c;可以用来实…

商务BD干多了,做一个无情的微信发消息机器人帮我发消息吧

1. 有没有那种做微信的伙伴&#xff0c;每天需要定点定时发消息&#xff1f; 2. 有没有那种做电商商务的朋友&#xff0c;每天需要发消息提醒达人商务们&#xff1f; 3. 有没有那种需要定时定点打卡&#xff0c;需要提醒自己要干啥的兄弟姐妹&#xff1f;** 那么有没有大冤种去…

如何获取电脑软件图标和app图标

如何获取电脑软件图标和app图标大家在写博客或者作图的时候经常会需要找到电脑软件图标或者app图标&#xff0c;如果从网上找有的图标并不清楚&#xff0c;今天给大家分享下&#xff0c;怎么快速的获取电脑软件图标和app图标&#xff0c;得到的图标也比较清楚。电脑软件图标获取…

【操作系统】操作系统的Buffer和Cache

文章目录1.Buffer和Cache的区别2.磁盘和文件写入操作案例3.磁盘和文件读取操作案例4.Cache和Buffer的命中案例1.Buffer和Cache的区别 &#xff08;1&#xff09;什么是Buffer Buffer指Linux内存的 Buffer cache&#xff08;缓冲区&#xff09;。Buffer为了让不同的速度的设备…

【迅为iMX6Q】开发板 Linux 5.15.71 SD卡 启动

开发环境 win10 64位VMware Workstation Pro 16ubuntu 22.04【迅为imx6q】开发板&#xff0c; 2G DDR linux-imx 下载 使用 NXP 官方提供的 linux-imx&#xff0c;代码地址为&#xff1a; https://github.com/nxp-imx/linux-imx 使用 git 下载 linux-imx&#xff0c; git cl…

Linux应用编程---6.无名管道

Linux应用编程—6.无名管道 6.1 pipe()函数使用详情 ​ 管道是进程之间进行通讯的一种方式。管道有两种&#xff0c;分别是&#xff1a;无名管道和有名管道。先看无名管道。管道创建函数是pipe()&#xff0c;在Linux终端输入man pipe。 图1 pipe()函数详情NAMEpipe, pipe2 - …

Mathorcup数学建模竞赛第六届-【妈妈杯】B题:小区车位分布的优化设计与评价(附一等奖获奖论文、C++和matlab代码)

赛题描述 随着现代社会经济的快速发展,房地产成为国家经济发展中重要的经济增长点之一。而小区内汽车停车位的分布对于小区居民的上下班出行影响很大。请建立数学模型,解决下列问题: 问题1:分析评判小区汽车停车位分布是否合理的几个关键指标,建立评判车位分布合理的数学…

mybatis官方文档之第一个mybatis程序实操

mysql数据库准备工作&#xff1a; 首先&#xff0c;我们需要在mysql数据库中&#xff0c;建立数据库和数据表&#xff1a; //创建数据库 create database my_batis; //创建表 create table students(id int not null,name varchar(30) default null,pwd varchar(30) default …

用移动激光扫描来估计树干直径的分割和树干校准法

Paper题目&#xff1a;Mobile Laser Scanning for Estimating Tree Stem Diameter Using Segmentation and Tree Spine Calibration Abstract 移动激光扫描 (MLS) 可以通过使用自动推导出树干中心位置和树干直径的算法来提高森林清查效率。在这项工作中&#xff0c;我们提出了…

远程控制软件– 向日葵使用教程

新冠疫情的严峻形式下&#xff0c;各地都延期复工&#xff0c;一时间远程办公&#xff0c;在家办公可谓非常火爆。然而&#xff0c;家里毕竟不是公司&#xff0c;很多的资料都在办公室电脑&#xff0c;甚至一些比较专业系统或者专属网络限制无法完成在家办公&#xff0c;这时候…

从加(解)密角度讲栅栏密码

目录普通型栅栏加密原理解密原理W型栅栏加密原理实例解密原理这今天在做新生赛的一道“只有倒着翻过十八层的篱笆才能抵达北欧神话的终点”&#xff0c;研究了很长时间的栅栏原理&#xff0c;flag没出来&#xff0c;而且自己对于普通和W型的加密解密整的有的蒙… 原先一篇文章里…

sentinel-流量控制

github地址&#xff1a;主页 alibaba/Sentinel Wiki GitHub 目录 概述基于 QPS/并发数的流量控制基于调用关系的流量控制 概述 流量控制&#xff08;flow control&#xff09;&#xff0c;其原理是监控应用流量的 QPS 或并发线程数等指标&#xff0c;当达到指定的阈值时对…

免费安全的内网穿透实现——Tailscale

一、需求说明想要实现访问公司或家里的网络设备&#xff08;Windows电脑、NAS、安卓设备等&#xff09;;但是这些设备又没有对应的公网IP地址&#xff1b;且就算有公网 IP 地址&#xff0c;也不放心让这些网络设备直接公开暴露在网络环境中&#xff08;这样很容易被频繁的恶意扫…

【MySQL Tips】除了指定密码外 MySQL客户端更好的选择——登录路径

在实际项目中&#xff0c;我们在生产&#xff08;环境&#xff09;发布新版本或运维时&#xff0c;使用 mysql 、mysqladmin、mysqlimport、mysqldump、mysqlpump 等 MySQL 客户端程序时&#xff0c;每次都需要输入密码&#xff0c;一般都会采用更安全的互动输入密码模式&#…