02时间复杂度与空间复杂度

news2024/10/6 2:28:58

开始系统学习算法啦!为后面力扣和蓝桥杯的刷题做准备!这个专栏将记录自己学习算法是的笔记,包括概念算法运行过程,以及代码实现,希望能给大家带来帮助,感兴趣的小伙伴欢迎评论区留言或者私信博主哦!今天更新的是《02时间复杂度与空间复杂度》

目录

一、时间复杂度

先决条件

概念

分类

计算规则

案例分析

二、空间复杂度:

概念

示例


一、时间复杂度

先决条件

  • 一般来说,一个算法执行所消耗的时间从理论上是算不出来的。
  • 一个算法花费的时间与算法中语句的执行次数是成正比的。
  • 哪个算法语句执行次数多,它花费的时间就多。

概念

  1. 对于算法最重要的是数量级和趋势,这些是分析算法主要的部分。而计量算法基本操作数量的规模函数中那些常量因子可以忽略不计。
  2. 时间复杂度实际上就是一个函数,该函数计算的是执行基本操作的次数。一个算法语句总的执行次数是关于问题规模N的某个函数,记为f(N),N称为问题的规模。语句总的执行次数,记为T[N],当N不断变化时,T[N]也在不断变化,算法的执行次数的增长速率和f(N)的增长速率相同。则T[N]=O(f(N)),称O(f(N))为时间复杂度的O渐进表示法。

分类

  • 算法完成工作最少需要多少基本操作叫做最优时间复杂度,是一种最乐观最理想的状态。
  • 算法完成工作最多需要多少基本操作叫做最坏时间复杂度,是算法的一个保障。
  • 算法完成工作平均需要多少基本操作叫做平均时间复杂度,它可以均匀全面的评价一个算法的好坏。

计算规则

  1. 基本操作,即只有常数项,认为其时间复杂度为O(1)
  2. 顺序结构,时间复杂度按加法进行计算
  3. 循环结构,时间复杂度按乘法进行计算
  4. 分支结构,时间复杂度取最大值
  5. 判断一个算法效率时,往往只需要关注操作数量的最高次项,其他次要项和常数项可以忽略
  6. 在没有特殊说明时,我们所分析的时间复杂度都是指最坏时间复杂度

案例分析

见csdn博客:

详解时间复杂度计算公式(附例题细致讲解过程):

详解时间复杂度计算公式(附例题细致讲解过程)_爱睡觉的咋的博客-CSDN博客_时间复杂度计算公式

没学算法前:三次暴力循环

import time
begin_time = time.time()
for a in range(0,1001):
    for b in range(0,1001):
        for c in range(0,1001):
            if a+b+c == 1000 and a**2+b**2 == c**2:
                print("a,b,c:",a,b,c)
end_time = time.time()
print("这段代码一共执行了:",end_time-begin_time,"s")

时间复杂度为O(n^3)

学过算法之后:通过abc关系直接生成c:

import time
begin_time = time.time()
for a in range(0,1001):
    for b in range(0,1001):
        c = 1000-a-b
        if a+b+c == 1000 and a**2+b**2 == c**2:
            print("a,b,c:",a,b,c)
end_time = time.time()
print("这段代码一共执行了:",end_time-begin_time,"s")

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

二、空间复杂度:

概念

一个程序的空间复杂度是指运行完一个程序所需的内存的大小。利用程序的空间复杂度可以对程序的运行所需要的内存多少有一个预先估计。

一个程序执行时,除了需要储存空间和存储本身所使用的指令、常数、变量和输入数据外,还需要一些对数据进行操作的工作单元和存储一些为现实计算所需信息的辅助空间。程序执行时所需存储空间包括以下两个部分:

  • 固定部分。这部分空间的大小与输入/输出的数据的个数多少、数值无关。主要包括指令空间(即代码空间)、数据空间(常量、简单变量)等所占的空间。这部分属于静态空间
  • 可变空间。这部分空间的主要包括动态分配的空间,以及递归栈所需的空间等。这部分的空间大小与算法有关。

示例

def reverse(a,b):
    n = len(a)
    for i in range(n):
        b[i] = a[n-1-i]
        #完成列表的逆序

调用reverse方法时,要分配的内存空间包括:引用a,引用b、局部变量n、局部变量i。因此f(n)= 4,该算法的空间复杂度为S(n)=O(1)

:通常,我们都是用“时间复杂度”来指运行时间的需求,是用“空间复杂度”指空间需求。当直接要让我们求“复杂度”时,通常指的是时间复杂度。显然对时间复杂度的 追求更是属于算法的潮流

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

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

相关文章

如何将多个视频剪辑到一起?如何把两段视频合成一段

如何将多个视频剪辑到一起?那么如何拼接视频?接下来小编就带大家一起了解下有关视频拼接的几款工具推荐。 工具一:TS视频拼合工具 TS视频合并工具是一款轻便简单的视频合并工具,主要是用于合并TS视频文件的工具,当用…

【分享】本地js文件替换源网页js文件的方法

本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删!本地js文件替换源网页js文件的方法 环境 win10Fiddlerchrome方法一:Fiddler抓包替换js文件 自动回复器–…

HashMap源码分析以及面试题

目录 5、HashMap源码分析 5.1、初始化容量 5.2、负载因子是多少? 5.3、负载因子可以大于或小于0.75吗? 5.4、扩容长度为多少? 5.5、下标是怎么计算的? 5.6、hash冲突,是怎么解决的? 5.7、什么时候…

[附源码]JAVA毕业设计英语课程学习网站(系统+LW)

[附源码]JAVA毕业设计英语课程学习网站(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术…

安装 NVSwitch GPU 服务器的 cuda 驱动版本、nvidia-docker 指南

一,安装 Cuda 驱动 可参考笔者之前写过的文章: 升级 GPU 服务器 cuda 驱动版本指南 如果出现如下报错,则需安装 gcc、kernel-devel,请参考下面第二步安装 gcc、kernel-devel。 二,安装 gcc、kernel-devel 1&#…

基于狮群算法优化的lssvm回归预测-附代码

基于狮群算法优化的lssvm回归预测 - 附代码 文章目录基于狮群算法优化的lssvm回归预测 - 附代码1.数据集2.lssvm模型3.基于狮群算法优化的LSSVM4.测试结果5.Matlab代码摘要:为了提高最小二乘支持向量机(lssvm)的回归预测准确率,对…

[附源码]计算机毕业设计高校车辆管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis MavenVue等等组成,B/S模式…

地表最强:免费文字转语音工具

0、前言 我们在刷短视频的时候,经常会听到一些AI合成声音,它们有各种音色、语调,甚至不同的情绪,听起来与人声无异,其实这些大都是利用微软Azure的文字转语音技术来实现的。 虽然国内也有很多配音工具,但…

【优化算法】粒子群优化算法

粒子群优化算法粒子群优化算法简介粒子群优化算法原理粒子群优化算法的数学描述粒子群优化算法框架PySwarms:Python中粒子群优化的研究工具包PySwarms快速使用示例:编写自己的优化循环相关资料粒子群优化算法简介 粒子群优化算法(Particle Swarm Optimi…

如何安然度过行业大萧条,听听10年测试老鸟的分析

国内的互联网行业发展较快,所以造成了技术研发类员工工作强度比较大,同时技术的快速更新又需要员工不断的学习新的技术。因此淘汰率也比较高,超过35岁的基层研发类员工,往往因为家庭原因、身体原因,比较难以跟得上工作…

Huawei Compute Architecture for Neural Networks - CANN

Huawei Compute Architecture for Neural Networks - CANN1. Technical support (技术支持) https://support.huawei.com/enterprise/en/index.html https://support.huawei.com/enterprise/zh/index.html Server - Intelligent Computing -> Ascend Computing (昇腾计算)…

ChatGPT简介与Q群机器人部署教程

最近OpenAi推出的ChatGPT火出NLP圈子,看到不少人说强人工智能已经出现,于是赶紧来体验感受一下。 ChatGPT简介 ChatGPT是一个基于GPT-3(通用语言模型)的聊天机器人。它的目的是能够通过自然语言交流与用户进行对话。它能够理解用…

Seq2Seq基本原理

Seq2Seq基本原理 encoder & decoder Seq2Seq结构用于多个输入和多个输出的模型,但是输入和输出的大小可能并不一致,其本质上也是RNN网络的一个扩展,常见的应用场景包括:机器翻译、语音识别、文本摘要等。 常见的seq2seq的输…

Linux源码下载

方法一、Git下载源码 1.1、进入Linux官网 通过任意浏览器访问:https://www.kernel.org/,界面如下 1.2、选择版本 点击某一个版本对应的browse,Linux版本分为:mainline(主线版本)、stable(稳定版…

函数之公式求和

【问题描述】 编写一个按以下公式求和的函数, 其中 a 是一个 2 ~ 8 的数字。 例如,S(3,5)333333333333333。 在主函数中,由键盘输入a和n,输出 S(a-1,n-1)S(a,n)S(a1,n1) 的值。 例如输入:3 5 则输出&#xff1a…

PAI-Diffusion模型来了!阿里云机器学习团队带您徜徉中文艺术海洋

作者:汪诚愚、段忠杰、朱祥茹、黄俊 导读 近年来,随着海量多模态数据在互联网的爆炸性增长和训练深度学习大模型的算力大幅提升,AI生成内容(AI Generated Content,AIGC)的应用呈现出爆发性增长趋势。其中…

算法竞赛入门【码蹄集进阶塔335题】(MT2251-2270)

算法竞赛入门【码蹄集进阶塔335题】(MT2251-2270) 文章目录算法竞赛入门【码蹄集进阶塔335题】(MT2251-2270)前言为什么突然想学算法了?为什么选择码蹄集作为刷题软件?目录1. MT2251 讲价2. MT2252 复数类13. MT2253 复数类24. MT…

CF GLR24-C. Doremy‘s City Construction

CF原题链接 题目大意&#xff1a;n个结点&#xff0c;每个结点有一个正数值。现在让你在n个点间进行边的连接&#xff0c;唯一限制条件是不能出现这种情况&#xff1a;如3个点A,B,C&#xff0c;且A<B<C&#xff0c;那么不能同时出现边&#xff08;A&#xff0c;B&#xf…

冯诺依曼体系和操作系统概念

Ⅰ. 冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系。 截至目前&#xff0c;我们所认识的计算机&#xff0c;都是有一个个的硬件组件组成 输入单元&#xff1a;包括键盘, 鼠标&#xf…

太详细了,在 Windows 上安装 PySpark 保姆级教程

在本文中&#xff0c;我将和大家一起学习如何在 Windows 上安装和运行 PySpark&#xff0c;以及如何使用 Web UI 启动历史服务器和监控 Jobs。 安装 Python 或 Anaconda 发行版 https://www.python.org/downloads/windows/ 从 Python.org 或 Anaconda 发行版 下载并安装 Pyth…