码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 数据结构第一课 —— 时间和空间复杂度


    目录

    • 一、什么是数据结构?
    • 二、关于算法的好坏
      • 1、算法效率
    • 三、时间复杂度
      • 1、时间复杂度是什么?
      • 2、关于大O表示法
        • (1)大O的渐进表示法
        • (2)大O阶方法的推导
    • 四、空间复杂度
      • 空间复杂度是什么?

    一、什么是数据结构?

    Alt要想学好数据结构,我们首先要知道数据结构是什么?
    在百度搜索中,我们可以找到这个问题的答案:数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。

    二、关于算法的好坏

    在了解什么是数据结构后,我们再来思考一个问题:我们如何来评断一个算法的好坏?
    是通过算法运行的时间还是通过算法开辟的空间?究竟是时间更为重要还是空间更为重要呐?
    下面,我们就来解答这个问题。

    1、算法效率

    算法的效率分为两种:一是时间效率,二是空间效率。其中,时间效率被称为时间复杂度;同样的,空间效率被称为空间复杂度。

    时间复杂度:主要用来衡量一个算法的运行速度。
    空间复杂度:主要用来衡量一个算法所需要的额外空间。

    虽然两种效率所衡量的对象不同,但是,两种效率对于算法来说都很重要,但在目前来说,对于一个算法评断它的好坏时:时间复杂度>>空间复杂度。

    三、时间复杂度

    1、时间复杂度是什么?

    首先,我们来了解一下什么是时间复杂度。

    时间复杂度:在计算机科学中,时间复杂性,又称时间复杂度,算法的时间复杂度是一个函数,它定性描述该算法的运行时间。

    简单来说:算法中基本操作的执行次数,为该算法的时间复杂度。

    2、关于大O表示法

    (1)大O的渐进表示法

    要想计算某算法的时间复杂度,首先要学会大O表示法。
    首先举个例子:

    public class Test {
        public static void main(String[] args) {
            int count=0;
            for (int i = 0; i < N; i++) {
                count++;
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    如果说要计算上面算法的时间复杂度。
    我们知道,count=0; int i=0;这两部分是只进行一次的。所以对于这两部分来说,一共是2个时间单元。
    在i一共是N+1个时间单元(在最后一次还要比较一下)。
    在i++和count++部分一共是2*N个时间单元。
    那么,这个算法一共需要3*N+3个时间单元。

    N11000
    3*N+3630003
    3*N930000
    N110000

    由上表,我们可以看出,对于N很大的情况下,常数对我们的时间复杂度影响不大。然而,当N变大的情况下,N前的系数对于时间复杂度的影响也渐渐减小了。
    所以,我们这时提出大O表示法:

    大O符号:是用于描述函数渐进行为的数学符号。

    (2)大O阶方法的推导

    1、用常数1取代运行时间中的所有加法常数。
    2、在修改后的运行次数函数中,只保留最高阶项。
    3、如果最高阶项存在且不是1,则去除与这个项目相乘的常数,得到的结果就是大O阶。

    当然,在某些算法的时间复杂度存在最好、平均和最坏的情况。
    最好情况:任意输入规模的最小运行次数(下限)。
    平均情况:任意输入规模的期望运行次数。
    最坏情况:任意输入规模的最大运行次数(上限)。

    在实际情况中,我们关注的一般是算法的最坏情况。

    四、空间复杂度

    空间复杂度是什么?

    空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。

    所以,空间复杂度算的是变量的个数。

    当然,计算空间复杂度时,我们使用的也是大O渐进表示法。

  • 相关阅读:
    在2023年使用Unity2021从Built-in升级到Urp可行么
    Git系列之查看功能
    C++控制不同进制输出(二进制,八进制,十进制,十六进制)各种进制之间的转换
    思维模型 冷热水效应
    多机器人仓储巡逻路径规划问题的A*算法实现(附带MATLAB代码)
    MySQL 是什么有什么用处下载和安装教程等值连接数据库基础知识怎么读取增删改短语优化的几种方法
    Power BI 傻瓜入门 13. 进入仪表板
    《对比Excel,轻松学习Python数据分析》读书笔记------时间序列
    短视频直播盈利系统 专为企业打造的短视频直播盈利课(价值1980元)
    9.1 运用API创建多线程
  • 原文地址:https://blog.csdn.net/weixin_53212110/article/details/126718267
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号