时间复杂度和空间复杂度

目录

一. 时间复杂度

有循环的时间复杂度例子:

1. 求冒泡排序的时间复杂度?O(n^2)

2. 求二分查找的时间复杂度?O(logn)

3. 求斐波那契数的时间复杂度?O(n) 

​编辑

递归的时间复杂度例子:

1. 递归求阶乘,时间复杂度?O(n)

2. 递归求斐波那契数,时间复杂度?O(2^n)

!!常见的时间复杂度及大小关系:

二. 空间复杂度

有循环的空间复杂度例子:

1. 求冒泡排序的空间复杂度?O(1)

2. 求二分查找的空间复杂度?O(1)

3. 求斐波那契数的空间复杂度?O(n)

递归的空间复杂度例子:

1. 递归求阶乘,空间复杂度?O(n)

2. 递归求斐波那契数,空间复杂度?O(n)

总结


一. 时间复杂度

时间复杂度是一个数学函数,定量的描述一个算法的运行时间。

使用大O的渐进表示法来表示时间复杂度 —— 常数看做1,然后找最高次,去系数

有些算法的时间复杂度存在最好、平均和最坏情况,我们平时所说的复杂度指的是最坏情况的时间复杂度

求时间复杂度:找循环,结合代码的思想!如果是递归,那么    递归的时间复杂度 = 递归的次数 * 每次递归之后执行的次数

有循环的时间复杂度例子:

1. 求冒泡排序的时间复杂度?O(n^2)

冒泡排序,最坏情况的时间复杂度:O(n^2)  最好情况下的时间复杂度:O(n)

结合思想,冒泡排序,时间复杂度是个等差数列求和:1+2+3+...+(n-1)

2. 求二分查找的时间复杂度?O(logn)

二分查找,时间复杂度是: O(logn)

每次砍一半,最坏情况,砍到最后只有一个元素时是找的那个元素。

假设砍了x次,只剩那个查找的元素。

那么  n/(2^x) = 1

解出 x = logn(以2为底n的对数)需要砍的次数即时间复杂度

3. 求斐波那契数的时间复杂度?O(n) 

时间复杂度:O(n) 


递归的时间复杂度 = 递归的次数 * 每次递归之后执行的次数

递归的时间复杂度例子:

1. 递归求阶乘,时间复杂度?O(n)

递归的次数:n-1

每次递归之后执行的次数:1

时间复杂度:O(n) 

2. 递归求斐波那契数,时间复杂度?O(2^n)

递归的次数: 2^1+2^2+...2^(n-1) = 2^n-2(等比数列求和)

每次递归之后执行的次数:1

时间复杂度:O(2^n) 

!!常见的时间复杂度及大小关系:

O(1)  <  O(logn)  <  O(n)  <  O(nlogn)  <  O(n^2)  <  O(2^n)

二. 空间复杂度

空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度。

空间复杂度算的是临时变量的个数,本质是衡量一个算法浪费内存的情况,即额外使用的空间

使用大O的渐进表示法来表示空间复杂度。

有循环的空间复杂度例子:

1. 求冒泡排序的空间复杂度?O(1)

冒泡排序空间复杂度O(1)

循环定义,第二次定义这个变量时,第一次定义的已经被回收了。因为循环结束,局部变量会被回收。所以,sorted,i,end 这些变量都是常数项,来来回回其实每个只浪费了一个额外空间,一共浪费3个空间。所以空间复杂度是O(1)。

2. 求二分查找的空间复杂度?O(1)

二分查找的空间复杂度O(1)

3. 求斐波那契数的空间复杂度?O(n)

空间复杂度:O(n)

因为额外创建了一个数组fibArray,使用了额外的空间。循环定义的变量算常数项忽略不计。

递归的空间复杂度例子:

1. 递归求阶乘,空间复杂度?O(n)

每次递归,都会调用一次这个函数,都会在栈上开辟一个空间,开辟了 n-1 个空间,

所以空间复杂度是O(n) 

2. 递归求斐波那契数,空间复杂度?O(n)

每次递归,都会调用一次这个函数,都会在栈上开辟空间。但函数执行完,也就是“归”时,开辟的空间就被回收了。

让我们先来看一下执行过程:(以n为3时举例)

想要计算f(3)的结果,会先执行完左侧的f(2)返回结果,才会去执行右侧的f(1)

而想计算f(2)的结果,需要先执行完左侧f(1)返回结果,才会去执行右侧f(0),

f(1)和f(0)都执行完返回结果了,f(2)才算执行完

执行完f(2),才会去执行右侧f(1)

也就是说,会按照“箭头”一路走到底,一直走到能“归”。这段是一直开辟空间的。此时开辟了2块临时空间。

而f(1)执行完返回结果后,这个空间就会被回收,这时候去执行f(0),开辟一块空间。虽然执行f(0)开辟了一块空间,但是此时f(1)开辟的空间已经被回收了,临时空间并没有增加,还是只额外浪费了一块。可以理解为空间是可以重复利用的,f(1)回收的空间又被f(0)用了,f(1)和f(0)实际上只浪费了一块空间。

所以说,其实每一层只额外浪费了一块空间。当n为3时,事实上一共只额外开辟了2块空间。我们也可以知道,当n为4时,浪费了3块空间。

所以,递归求斐波那契数,会额外使用n-1个空间

空间复杂度:O(n)

总结

冒泡排序:                              时间复杂度O(n^2)                 空间复杂度O(1)

二分查找:                              时间复杂度O(logn)                空间复杂度O(1)

循环求斐波那契数:                时间复杂度O(n)                     

递归求斐波那契数:                时间复杂度O(2^n)                 空间复杂度O(n)

递归求阶乘:                           时间复杂度O(n)                     空间复杂度O(n)

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue2(初识vue)

目录 一&#xff0c;Vue2简介1.1&#xff0c;什么是vue1.2&#xff0c;初始vue1.3&#xff0c;搭建vue环境1.4&#xff0c;第一个hello world 二&#xff0c;基础知识2.1 指令2.2-1 指令v-text2.2-2 指令v-html2.2-3 指令v-if2.2-4 指令v-else2.2-5 指令v-show2.2-6 v-if指令与…

华为数通HCIA-网络参考模型(TCP/IP)

网络通信模式 作用&#xff1a;指导网络设备的通信&#xff1b; OSI七层模型&#xff1a; 7.应用层&#xff1a;由应用层协议&#xff08;http、FTP、Telnet.&#xff09;为应用程序产生对应的数据&#xff1b; 6.表示层&#xff1a;将应用层产生的数据转换成网络设备看得懂…

react ant add/change created_at

1.引入ant的 Table import { Table, Space, Button, message } from antd; 2.获得接口的数据的时候增加上创建时间 const response await axios.get(${Config.BASE_URL}/api/v1/calculation_plans?token${getToken()});if (response.data.message ok) {const data respon…

从感知到理解-融合语言模型的多模态大模型研究

©PaperWeekly 原创 作者 | 张燚钧 单位 | 中国移动云能力中心 研究方向 | 预训练大模型 引言 近年来&#xff0c;大语言模型&#xff08;Large language model, LLM&#xff09;取得了显著进展。以 ChatGPT 为代表的 LLM 在自然语言任务上展现出惊人的智能涌现能力。尽管…

JVM面试题--实践

目录 JVM 调优的参数可以在哪里设置参数值 war包部署在tomcat中设置 jar包部署在启动参数设置 JVM 调优的参数都有哪些&#xff1f; 设置堆空间大小 虚拟机栈的设置 年轻代中Eden区和两个Survivor区的大小比例 年轻代晋升老年代阈值 设置垃圾回收收集器 JVM 调优的工…

微服务实战项目-学成在线-选课学习(支付与学习中心)模块

微服务实战项目-学成在线-选课学习(支付与学习中心)模块 1 模块需求分析 1.1 模块介绍 本模块实现了学生选课、下单支付、学习的整体流程。 网站的课程有免费和收费两种&#xff0c;对于免费课程学生选课后可直接学习&#xff0c;对于收费课程学生需要下单且支付成功方可选…

实验笔记之——Android项目的适配

android有一个很烦人的点就是版本之间差距较大&#xff0c;且不兼容&#xff0c;导致不同版本之间代码兼容很容易出问题&#xff0c;一个常见的例子就是几年前自己开发的app&#xff0c;几年后再用竟然配置不了。。。为此&#xff0c;写下本博客记录一下配置旧项目的过程。 …

【微信小程序】van-uploader实现文件上传

使用van-uploader和wx.uploadFile实现文件上传&#xff0c;后端使用ThinkPHP。 1、前端代码 json&#xff1a;引入van-uploader {"usingComponents": {"van-uploader": "vant/weapp/uploader/index"} }wxml&#xff1a;deletedFile是删除文件函…

SpringBoot项目修改中静态资源,只需刷新页面无需重启项目(附赠—热加载)

初衷 &#x1f4a2;初衷&#x1f4a2; 因为一遍遍修改并重启项目觉得很麻烦&#xff0c;所以刚开始就自己给项目配置了热加载&#xff0c;但奈何代码更新还是慢&#xff0c;还不如我重启一遍项目的速度&#xff0c;所以放弃了自己上网找到的热加载配置。直到我debugger前端代码…

云原生全栈体系(二)

Kubernetes实战入门 第一章 Kubernetes基础概念 一、是什么 我们急需一个大规模容器编排系统kubernetes具有以下特性&#xff1a; 服务发现和负载均衡 Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器&#xff0c;如果进入容器的流量很大&#xff0c;Kubernetes 可以负…

load、unload和pagehide、pageshow

一、load、unload和pagehide、pageshow的主要应用 1&#xff09;load 和 unload 事件监听web页面的进入和离开&#xff0c;一般用于页面的首次加载、刷新和关闭等操作的监听&#xff1b; 2&#xff09;pageshow 和 pagehide 事件多用于监听浏览器的前进和后退等。 二、pagesh…

【雕爷学编程】 MicroPython动手做(38)——控制触摸屏2

MixPY——让爱(AI)触手可及 MixPY布局 主控芯片&#xff1a;K210&#xff08;64位双核带硬件FPU和卷积加速器的 RISC-V CPU&#xff09; 显示屏&#xff1a;LCD_2.8寸 320*240分辨率&#xff0c;支持电阻触摸 摄像头&#xff1a;OV2640&#xff0c;200W像素 扬声器&#…

SQL 语句中 left join 后用 on 还是 where,区别大了!

目录 情况 小结 举例 情况 前天写SQL时本想通过 A left B join on and 后面的条件来使查出的两条记录变成一条&#xff0c;奈何发现还是有两条。 后来发现 join on and 不会过滤结果记录条数&#xff0c;只会根据and后的条件是否显示 B表的记录&#xff0c;A表的记录一定会显…

RT1052的定时器

文章目录 1 通用定时器1.1 定时器框图1.2 实现周期性中断 2 相关寄存器3 定时器配置3.1 时钟使能3.2 初始化GPT1定时器3.2.1 base3.2.2 initConfig3.2.2.1 clockSorce3.2.2.2 divider3.2.2.3 enablexxxxx 3.3 设置 GPT1 比较值3.3.1 base3.3.2 channel3.3.3 value 3.4 设置 GPT…

数据库的分库分表

#!/bin/bash ######################### #File name:db_fen.sh #Version:v1.0 #Email:admintest.com #Created time:2023-07-29 09:18:52 #Description: ########################## MySQL连接信息 db_user"root" db_password"RedHat123" db_cmd"-u${…

LNMP及论坛搭建(第一个访问,单节点)

LNMP&#xff1a;目前成熟的一个企业网站的应用模式之一&#xff0c;指的是一套协同工作的系统和相关软件 能够提供静态页面服务&#xff0c;也可以提供动态web服务&#xff0c;LNMP是缩写 L&#xff1a;指的是Linux操作系统。 N&#xff1a;指的是nginx&#xff0c;nginx提…

操作系统 - 小记 230803

文章目录 计算机的硬件组成程序的存储和执行程序语言的设计和进化存储设备的层次结构操作系统 https://www.bilibili.com/video/BV1Q5411w7z5?p2 计算机的硬件组成 CPU CU&#xff0c;控制单元ALU&#xff0c;算数逻辑单元寄存器 IO Bridge 处理器和外部交互的桥梁Main Memory…

Java并发编程之顺序一致性

如果程序是正确同步的&#xff0c;程序的执行将具有顺序一致性&#xff08;Sequentially Consistent&#xff09;——即程序的执行结果与该程序在顺序一致性内存模型中的执行结果相同。 同步&#xff0c;即排队。 同一时刻&#xff0c;只能有一个线程和内存交互&#xff01;&a…

windows环境下安装elasticsearch、kibana

通过本文可以快速在windows系统上安装elasticsearch、kibana环境。 当你用Integer类型的时候&#xff0c;要非常小心&#xff0c;因为100等于100、但是200不等于200&#xff0c;当然&#xff0c;如果你会一点小花招&#xff0c;也可以让100不等于100、让200等于200。(运算符比较…

windows物理机 上安装centos ,ubuntu,等多个操作系统的要点

一、摘要 一般情况下&#xff0c;我们的笔记本或工作电脑都默认安装windows 分几个区&#xff0c;当下是win7 win8 win 10 win11 等&#xff0c;突然我们有需求需要安装个centos &#xff0c;后面我们应当怎么做&#xff0c;要点是什么&#xff1f;一定要根据网上的贴子一步步来…