在本系列第1篇《走下神坛吧!算法》中提到了:计算复杂度分为时间复杂度与空间复杂度,第3篇《KO!大O——时间复杂度》详细介绍了时间复杂度,本篇文章来讲讲空间复杂度。

空间复杂度和硬件资源开销是一回事情吗?

CPU资源开销分析:

CPU的资源的设计初衷更多的是用于提升计算性能;

对CPU资源的利用,基本原则都是“多多(占用、发挥)益善;

加之CPU的资源空间大小与内存、外存和外设比较,非常有限。

内存资源开销分析:

静态视角:程序要装进内存才能运行

动态视角:程序在运行时,动态申请内存

外存资源开销分析:

静态视角:程序本身,以二进制可执行映像形态,存放在外存上的大小

动态视角:程序在运行时,对外存的需求大小(比如,在进行大数据处理时,将中间结果暂存到外存,腾出内存空间来做计算)

外设资源开销分析:

发明DMA、GPU的初衷是分担CPU工作量,提升计算机系统的整体性能。

计算与存储是计算机系统的两大功用,空间复杂度体现存储指标。

不同算法实现的程序的二进制可执行映像的大小,只要不是太烂,通常来说,不会有量级上的差别。

综上所述,我们可以得到如下两个结论:

  1. 空间复杂度聚焦内存与外存的开销
  2. 空间复杂度聚焦动态视角

特别地,研究内存的开销,就要了解内存模型:

进一步分解,就是以下三个方面:

  1. 程序运行时,静态内存分配量(静态区)
  2. 程序运行时,动态内存分配量(堆栈、堆)
  3. 程序运行时,外存需求量

静态内存分配

这部分内存分配是用于全局变量和常量的,识别出这些变量类型,并计算出对应的大小,也就得到了该部分内存分配的需求量。具体的方法就是在源代码中找到这些变量声明、定义的地方,然后根据类型来计算大小。

动态内存分配

对于堆:对应动态分配“原语”,如 new方法、malloc函数等。

对于堆栈:局部变量对应这一部分,其大小呼应这部分的内存分配大小。

程序运行时的外存需求

要搞清楚程序运行时对外存的需求,首先要找到对外存的访问。

对于高级语言而言,外存是被操作系统抽象成文件来被访问的。所以找到了文件访问的“原语”,也就定位到了对外存的访问。

“文件写原语”: 如writeFile()等。作用是把内存中装载的数据放到文件中去,对文件大小的占用就反映了对外存的需求量。

“文件读原语”:如readFile()等。作用是把外存文件中的内容放到内存中去。所涉及的内容大小就反映了对外存的需求量。

从上面的分析可以看出:外存的需求量取决于访问的文件内容大小,后者又和涉及的内存大小相关。所以可以用所涉及的内存大小来表征对外存的需求量。

动态分配算法_【原创连载】算法素颜(第4篇):空间复杂度你真的懂了吗?相关推荐

  1. 【Matlab】智能优化算法_蜻蜓优化算法DA

    [Matlab]智能优化算法_蜻蜓优化算法DA 1.背景介绍 2.灵感 3.公式推导 3.1 勘探和开发操作 4.算法流程图 5.文件结构 6.伪代码 7.详细代码及注释 7.1 DA.m 7.2 d ...

  2. 【Matlab】智能优化算法_蚁狮优化算法ALO

    [Matlab]智能优化算法_蚁狮优化算法ALO 1.背景介绍 2.基本思想 3.公式推导 3.1 ALO算法的运算符 3.2 蚂蚁的随机游动 3.3 困在蚂蚁坑里 3.4 修建陷阱 3.5 蚂蚁划向 ...

  3. 【Matlab】智能优化算法_灰狼优化算法GWO

    [Matlab]智能优化算法_灰狼优化算法GWO 1.背景介绍 2.基本思想 2.1 等级制度 2.2 狩猎方式 3.公式推导 3.1 社会等级制度 3.2 包围猎物 3.3 包围猎物 3.4 攻击猎 ...

  4. 机器学习 线性回归算法_探索机器学习算法简单线性回归

    机器学习 线性回归算法 As we dive into the world of Machine Learning and Data Science, one of the easiest and f ...

  5. python实现洗牌算法_洗牌算法及 random 中 shuffle 方法和 sample 方法浅析

    对于算法书买了一本又一本却没一本读完超过 10%,Leetcode 刷题从来没坚持超过 3 天的我来说,算法能力真的是渣渣.但是,今天决定写一篇跟算法有关的文章.起因是读了吴师兄的文章 <扫雷与 ...

  6. hash算法_一致性hash算法简介

    一致性hash算法有什么用?我们为什么需要一致性hash算法?这两个问题的答案可以看这篇文章 分布式系统路由算法简介. 了解了一致性hash算法出现的背景,我们来看看什么是一致性hash算法.一致性h ...

  7. 一致性hash算法_分布式寻址算法

    一.分布式寻址算法简介 分布式寻址算法是很重要的内容,不了解这些算法,也就不能透彻的了解各种分布式中间件的原理.简单说一下这些高大上的寻址到底是个啥意思,比如在elasticsearch中,采用的是多 ...

  8. 多边形之间相交求交点的算法_路径规划算法总结

    本文来自知乎网友@搬砖的旺财,地平线机器人算法工程师.作者根据自己本科和硕士阶段的学习经历,整理归纳了所接触过的规划算法. 1.自主机器人近距离操作运动规划体系 在研究自主运动规划问题之前,首先需建立 ...

  9. java 最少使用(lru)置换算法_缓存置换算法 - LRU算法

    LRU算法 1 原理 对于在内存中并且不被使用的数据块就是LRU,这类数据需要从内存中删除,以腾出空间来存储常用的数据. LRU算法(Least Recently Used,最近最少使用),是内存管理 ...

  10. python 查找算法_七大查找算法(Python)

    查找算法 -- 简介 查找(Searching)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素. 查找表(Search Table):由同一类型的数据元素构成的集合 关键字(Ke ...

最新文章

  1. minsdk(API23)deviceSdk(API22)
  2. 基于GEMM实现的CNN底层算法被改?Google提出全新间接卷积算法
  3. DB2 catalog
  4. 模板方法及策略设计模式实践
  5. 【python】【openCV】分水岭算法
  6. Windows Live Writer配置步骤
  7. Android资料之-EditText中的inputType
  8. C#课外实践——校园二手平台(心得篇)
  9. Data Services Designer将数据从sql server抽取到hana
  10. 从0.5到1写个rpc框架 - 2:远程服务调用(grpc)
  11. Linux开发板无法连接ssh
  12. 影子系统PowerShadow v2.6.0511中文破解版
  13. css3揭秘读书笔记--边框内圆角
  14. Nested transactions are not supported TransactionScope 多线程事务
  15. 肌酸报告:17个肌酸使用常见问题解答
  16. 有哪些好的编程习惯从一开始就值得坚持?
  17. ChatGPT版微信个人号搭建流程
  18. Matlab龚珀兹曲线模型预测,统计预测方法及预测模型介绍.ppt
  19. CTSCAPIO 2017游记
  20. CV2的conda安装

热门文章

  1. DOC命令小问题~~+理解
  2. 11.go 环境变量
  3. 1. 解决问题的能力
  4. 13. 永无止境:网站的伸缩性架构
  5. 20.Adding Javascript and CSS via Layout XML
  6. 应用安全-安全设备-Waf系列-软Waf-安全狗(Safedog)
  7. MVC项目实践,在三层架构下实现SportsStore,从类图看三层架构
  8. setTimeout 带参数调用问题
  9. ClamAV学习【6】—— cli_load函数浏览
  10. 课程设计之第二次冲刺----第一天