时间复杂度和空间复杂度

【数据结构和算法】时间复杂度和空间复杂度 一、前言 数据结构和算法是程序的灵魂,这是某位程序员大佬所言,学习了这门,我们便可以在 编程之路越走越远。时间复杂度一般是我们所关心的。 二、时间复杂度 时间复杂度简单的说就是一个程序运行所消耗的时间,叫做时间复杂度,我们无法目测 一个程序具体的时间复杂度,但是我们可以估计大概的时间复杂度。 一段好的代码的就根据算法的时间复杂度,即使在大量数据下也能保持高效的运行速率,这也是 我们学习算法的必要性。 2.1时间复杂度表示形式 一般用O()来表示算法的时间复杂度,我们叫做大O记法。 阅读详情

序:

在面试的时候,经常会询问到算法的题目,尤其是后端的面试,去一些互联网的大厂。那么解析一个题目的算法又很多种,面试官如何判断你这个算法是不是最优的算法。没错,判断一个算法的优秀程度,就是使用时间复杂度。

A.时间复杂度怎么计算?

个人总结出三个计算时间复杂度的规律

1、找到执行次数最多的语句

2、语句执行语句的数量级

3、用O表示结果

计算时间复杂度的3个出发点,掌握这三个出发点,那么一向搞不懂的时间复杂度就可以迎刃而解啦。

B.常用的时间复杂度所耗费的时间从小到大依次是:

O(1 )< O(logn) < O(n) < O(n*logn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)

C.常见的时间复杂度例子

git地址:https://github.com/startYao/25-years-old-effort-basics-demo-01.git

1.对于一个循环,假设循环体的时间复杂度为 O(n),循环次数为 m,则这个
循环的时间复杂度为 O(n×m)。

    /**
     * O(1)
     */
    private static void complexForO1() {
        System.out.println("O(1)");
    }

    /**
     * O(n)
     */
    private static void complexForOn(int n) {
        for (int i = 1; i < n; i++) {
            System.out.println("O(n)");
        }
    }

此时时间复杂度为 O(n × 1),即 O(n)。

2.对于多个循环,假设循环体的时间复杂度为 O(n),各个循环的循环次数分别是a, b, c...,则这个循环的时间复杂度为 O(n×a×b×c...)。分析的时候应该由里向外分析这些循环。

    /**
     * O(n^2)  demo1
     */
    private static void complexForOnSquare1(int n) {
        for (int i = 1; i < n; i++) {
            for (int j = 1; j < n; j++) {
                System.out.println("O(n^2)");
            }
        }
    }

此时时间复杂度为 O(n × n × 1),即 O(n^2)。

3.对于顺序执行的语句或者算法,总的时间复杂度等于其中最大的时间复杂度。

    /**
     * O(n^2)  demo2
     */
    private static void complexForOnSquare2(int n) {
        for (int i = 1; i < n; i++) {
            for (int j = 1; j < n; j++) {
                System.out.println("O(n^2)");
            }
        }

        for (int i = 1; i < n; i++) {
            System.out.println("O(n)");
        }
    }

此时时间复杂度为 max(O(n^2), O(n)),即 O(n^2)。

4.对于条件判断语句,总的时间复杂度等于其中 时间复杂度最大的路径 的时间复杂度。

    /**
     * O(n^2)  demo3
     */
    private static void complexForOnSquare3(int n) {
        if (n >= 0) {
            // 第一条路径时间复杂度为 O(n^2)
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    System.out.println("O(n^2)");
                }
            }
        } else {
            // 第二条路径时间复杂度为 O(n)
            for (int j = 0; j < n; j++) {
                System.out.println("O(n)");
            }
        }
    }

此时时间复杂度为 max(O(n^2), O(n)),即 O(n^2)。

5.O(log(n))

    /**
     * O(log(n))
     *
     * 假设循环次数为 t,则循环条件满足 2^t < n。
     * 可以得出,执行次数t = log(2)(n),即 T(n) = log(2)(n),可见时间复杂度为 O(log(2)(n)),即 O(log n)
     */
    private static void complexForOnLog(int n) {
        for (int i = 1; i < n; i++) {
            i *= 2;
            System.out.println("O(log(n))");
        }
    }

6.O(2^n)

    /**
     * O(2^n)
     * 显然运行次数,T(0) = T(1) = 1,同时 T(n) = T(n - 1) + T(n - 2) + 1,这里的 1 是其中的加法算一次执行。
     * 显然 T(n) = T(n - 1) + T(n - 2) 是一个斐波那契数列,通过归纳证明法可以证明,当 n >= 1 时 T(n) < (5/3)^n,同时当 n > 4 时 T(n) >= (3/2)^n。
     * 所以该方法的时间复杂度可以表示为 O((5/3)^n),简化后为 O(2^n)
     */
    private static int complexForO2SquareN(int n) {
        if (n <= 1) {
            return 1;
        } else {
            return complexForO2SquareN(n - 1) + complexForO2SquareN(n - 2);
        }
    }

剩余的,后续待补充...

荔枝派Lichee Nano全志F1C100s烧录避坑指南:从Fel模式到SPI Flash完整流程 本文详细介绍了荔枝派Lichee Nano基于全志F1C100s芯片的SPI Flash烧录完整流程,从FEL模式进入技巧到定制化sunxi-tools编译,再到分区策略与实战烧录步骤。针对开发者常见的烧录程序问题提供了专业解决方案,帮助用户高效完成嵌入式系统部署。 阅读详情

相关推荐

BIOS更新后PIN不可用怎么办?从原理到实操的完整修复指南

在计算机维护中,BIOS更新是常见的固件升级操作,但其引发的登录异常却常让用户措手不及。Windows Hello PIN并非传统密码,它通过TPM芯片与设备启动环境(PCR状态)强绑定,一旦主板固件或安全启动配置改变,TPM便会拒绝释放密钥,导致“由于此设备上的更改,你的PIN不再可用”。理解这一原理后,恢复路径清晰可控:优先尝试密码登录,或通过WinRE替换utilman.exe创建临时管理员,必要时还需处理BitLocker恢复密钥。本文面向系统维护与数据安全场景,系统梳理PIN失效的恢复流程与避坑方

weixin_31364787的博客 383

python判断语句的复杂度_Python|时间复杂度测试

问题描述由我们所知每一个python程序的运行都是很多次的算法变成的,而计算机进行计算一定会花费时间,而我们在学习python基础时已经知道python相对其他语言来说是相对比较慢的。这样的差异我们称为时间复杂度。可能在一般情况下我们看不出时间的差异,那么我们接下来就将对时间进行测试。解决方案我们进行测试的题目很简单:如果a+b+c=1000,并且a**2+b**2=c**2,求abc的组合。我们...

weixin_34805048的博客 675

面向网络攻击行为可视化分析系统实现【WebSocket + 可视化】

本系统主要应用于网站运维管理,它解决了网站运维人员排查网络攻击行为复杂且繁琐等问题,提高了运维人员网络安全分析的效率和准确性。

oNew_Lifeo的博客 1622

关于刷题入门(时间复杂度和空间复杂度)总结

在刷题过程中会遇到一些超时的现象,这就说明你的算法不符合题目要求的运行时间,称为超时。 时间复杂度:目前通俗来讲就是程序在完成后台测试数据(每组数据对应一个时间,所有时间都符合才可以)要花的时间,如果这个时间超过题目要求的时间(通常是1000ms)就会超时。它的具体定义以及公式计算等等会在数据结构这本书上出现。 空间复杂度:通俗来讲就是程序所占的内存。刷题中,这种情况很少出现这个超出限制。 ...

Cone的博客 3543

在VSCode中使用LaTex+(grammarly语法检测,chatgpt翻译,Sumatra PDF 轻量级pdf阅读器)

整个文章分为以下几个内容,打 * 的是必须要安装的。

u011895157的博客 2万+

椭圆曲线点加的推导公式(一)

椭圆曲线点加推导过程

qq_32100199的博客 1518

算法面试中:时间复杂度和空间复杂度是什么?

时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。(算法的复杂性体现在运行该算法时的计算机所需资源的多少上,计算机资源最重要的是时间和空间(即寄存器)资源,因此复杂度分为时间和空间复杂度 在描述算法复杂度时,经常用到o(1), o(n), o(logn), o(nlogn)来表示对应算法的时间复杂度。这里进行归纳一下它们代表的含义:这是算法的时空复杂度的表示...

qq_31459039的博客 4408

高通QCOM Camera Pipeline 可视化工具:从XML到交互式图谱的工程实践

本文详细介绍了高通QCOM Camera Pipeline可视化工具的工程实践,旨在解决Camera驱动与算法工程师在解析复杂XML配置文件时的痛点。该工具能将静态的XML文件(如g_camx_usecase.xml)自动转换为交互式视觉图谱,通过分层布局算法清晰展示Pipeline、Node、Port和Link的拓扑关系,并支持悬停查看、拖动缩放等交互操作,极大提升了开发调试与架构理解的效率。

prometheus5watch的博客 555

数据结构-算法基本概念

算法基本概念 5个特性:   1)有穷性   2)确定性   3)可行性   4)输入   5)输出 评价算法的优劣:   1)时间复杂度   它定性描述算法的运行时间。一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度,记为T(n)。   时间复杂度又分为:最坏时间复杂度,平均时间复杂度,最好时间复杂度。     最坏时间复杂度是指最坏情况下,算法的时间复杂度。     平均时间复杂度是指所有输入实力在等概率出现的情况

修心 393

作物生长模型Oryza V3实战1:为什么要研究它

ORYZAV3是水稻生长模拟模型ORYZA2000的最新升级版本(3.5版),作为作物生长模型,它通过数学方法和计算机技术模拟水稻生长发育过程及其与环境条件的相互作用。主要功能包括:模拟不同条件下的水稻生长和产量形成、评估环境胁迫影响、分析土壤碳氮动态以及进行区域尺度模拟。国内应用广泛,科研机构用于气候变化影响评估、灌溉模式比较等研究,并开展参数敏感性分析和应用培训。使用流程分为六个步骤:确定输入参数(气象、土壤、作物三类)、参数校准、设置模拟环境、运行模型、分析结果(输出50个参数)和计算产量(穗干重×收

505

基于Simulink的电力电子系统电磁兼容性(EMC)仿真

在电力电子系统中,由于高频开关器件的存在,会产生大量的电磁干扰(EMI),这对系统的稳定性和可靠性提出了挑战。Simulink 提供了一个强大的仿真环境,可以用来设计、分析和验证电力电子系统的电磁兼容性。本教程将详细介绍如何使用 Simulink 进行电力电子系统的电磁兼容性仿真。通过本教程,我们详细介绍了如何使用 Simulink 进行电力电子系统的电磁兼容性仿真。为了模拟电力电子系统中的电磁干扰(EMI),我们需要添加噪声源模块。为了更好地分析系统的电磁兼容性特性,可以在模型中添加频谱分析工具。

amy_mhd的博客 1127

算法面试通关#1.3时间和空间复杂度

算法复杂度: 指算法在编写成可执行程序后,运行时所占用的资源,包括时间资源和内存资源,即对应的时间复杂度和空间复杂度。 时间复杂度: 一个算法所耗费的时间,理论上讲是无法计算出来的,需要实际运行才能知道,但我们不可能对每个算法实际上机测试,只需要知道哪个算法费时,哪个算法省时就行。算法花费的时间于算法中语句执行的次数成正比, 一个算法中语句执行的次数被称为语句频度或时间频度,记作T(n)。 而算法...

My Blog 577

036、算子映射:如何将ONNX算子映射到NPU硬件指令?

《算子映射:ONNX到NPU的转换艺术》 本文深入探讨了将ONNX算子映射到NPU硬件指令的技术挑战与实践经验。作者通过真实案例揭示了映射过程中的常见陷阱,如Reshape算子被错误映射导致分类错误。文章详细分析了三种映射策略(直接映射、拆分映射和融合映射),并强调映射表在编译器中的核心作用。特别针对动态形状、精度对齐等难题提供了解决方案,分享了编写映射表时的实用铁律,包括先优化后映射、严格单元测试等。最后指出,成功的算子映射需要在数学语义、硬件约束和性能优化之间找到精确平衡,这种看似枯燥的工作实则决定着N

m0_50546716的博客 192

算法的时间复杂度和空间复杂度

算法的时间复杂度和空间复杂度

l_shadow_m的博客 4990

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

什么是时间复杂度和空间复杂度

先简要介绍一下: 算法复杂度分为时间复杂度和空间复杂度。其作用:时间复杂度是指执行这个算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。时间和空间(即寄存器)都是计算机资源的重要体现,而算法的复杂性就是体现在运行该算法时的计算机所需的资源多少。 时间复杂度: 1:算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好地反映出算法的优劣与否; 2

leikun153的博客 3万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

时间复杂度和空间复杂度计算

时间复杂度和空间复杂度计算方法 大O阶方法

m0_58761900的博客 5361

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

时间复杂度和空间复杂度详解

时间复杂度和空间复杂度详解 目录1.算法效率2.时间复杂度3.空间复杂度 1.算法效率 算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机 行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。 2.时间复杂度 1.时间复杂

qq_49613557的博客 1万+

如何理解时间复杂度和空间复杂度

如何理解时间复杂度和空间复杂度 算法是一种解决问题的方法,对于同一个问题,往往有很多解决办法,可是如何来评价解决方案的好坏呢?公认的好方法往往效率高,用时短。要合理的给一个算法衡量方式,往往需要从两个方面入手:时间复杂度和空间复杂度。 - 时间复杂度 时间复杂度即通常所说的算法执行所需要耗费的时间,时间越短,算法越好。但是,一个算法的执行时间往往无法精确估计。通常需要在实际的计算机运行才...

qq_21817237的博客 4643

Java 时间复杂度和空间复杂度

文章目录1.算法效率2.时间复杂度大O渐近表示法3.空间复杂度 1.算法效率 算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间 2.时间复杂度 时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一个算法执行所耗费的时间 大O渐近表示法 计算时间复杂度和空间复杂度时,为了估算一个算法的耗时情况,不需要计算出精确的执行次

m0_63611404的博客 3970
上一篇: NGINX 安装篇
下一篇: 设计模式-总体概括篇
Problem-boy
博客等级 码龄10年 1粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值