《代码随想录(Carl)》 数据结构与算法

程序的性能分析

2.1时间复杂度分析

2.1.1时间复杂度
时间复杂度是一个函数,它定性描述该算法的运行时间。
假设算法的数据规模为n,操作单元数量用函数f(n)来表示,随着数据规模n的增大,算法执行时间的增长率和f(n)的增长率相同,这个增长趋势称为算法的渐近时间复杂度,简称时间复杂度,记为 O(f(n))。
算法导论给出的解释:大O用来表示上界的,当用它作为算法的最坏情况运行时间的上界,就是对任意数据输入的运行时间的上界。
面试中说道算法的时间复杂度是多少指的都是一般情况。
数据用例的不一样,时间复杂度也是不同的,这一点是一定要注意的。
2.1.2如何描述时间复杂度
因为大O就是数据量级突破一个点且数据量级非常大的情况下所表现出的时间复杂度,这个数据量也就是常数项系数已经不起决定性作用的数据量。
2.1.3递归算法的时间复杂度分析
递归算法的时间复杂度 = 递归的次数 * 每次递归中的操作次数。

2.2程序的运行时间

2.2.2从硬件配置看计算机的性能
2.7 GHz 奔腾双核,i5处理器
1Hz = 1/s,1Hz 是CPU的一次脉冲(可以理解为一次改变状态,也叫时钟周期),称之为为赫兹
1GHz(兆赫)= 1000MHz(兆赫)
1MHz(兆赫)= 1百万赫兹
所以 1GHz = 10亿Hz,表示CPU可以一秒脉冲10亿次(有10亿个时钟周期),
2.7GHz为1秒27亿次脉冲, 双核理论上为54亿次脉冲。
1一般来说CPU大概运行十几次脉冲才完成一次计算;2CPU也要执行计算机的各种进程任务等,我们的程序仅仅是其中的一个进程而已。
2.2.3测试计算机的运行速度
测试计算机1s可以处理多大数量级数据的时候,有三点需要注意:
1CPU执行每条指令所需的时间实际上并不相同,例如CPU执行加法和乘法操作的耗时实际上都是不一样的。
2现在大多计算机系统的内存管理都有缓存技术,所以频繁访问相同地址的数据和访问不相邻元素所需的时间也是不同的。
3计算机同时运行多个程序,每个程序里还有不同的进程/线程在抢占资源。
尽管有很多因素影响程序的运行时间,但称职的程序员应该对程序的运行时间有一个大致的评估。
任何开发计算机程序的软件工程师都应该能够估计这个程序的运行时间是一秒钟还是一年。

2.3编程语言的内存管理

2.3.3内存对齐
不要以为只有C/C++才会有内存对齐,只要可以跨平台的编程语言都需要做内存对齐。
2.3.3.1为什么会有内存对齐?主要是两个原因:
1平台原因:不是所有的硬件平台都能访问任意内存地址上的任意数据,某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。为了同一个程序可以在多平台运行,需要内存对齐。
2硬件原因:经过内存对齐后,CPU访问内存的速度大大提升。
2.3.3.2大家可能会发现内存对齐岂不是浪费的内存资源么?
相对来说计算机内存资源一般都是充足的,我们更希望的是提高运行速度。
编译器一般都会做内存对齐的优化操作,也就是说当考虑程序运行时真正占用的内存大小的时候,也需要认识到内存对齐的影响。

2.4空间复杂度分析

2.4.1空间复杂度(Space Complexity)
空间复杂度是对一个算法在运行时占用内存空间大小的量度,记做S(n)=O(f(n),依然使用大O来表示。利用程序的空间复杂度,可以预先估计程序运行时需要多少内存。
空间复杂度可以准确计算出程序运行时所占用的内存值么?
很多因素会影响程序真正使用的内存大小,例如编译器的内存对齐,编程语言容器的底层实现等这些都会影响到程序内存的开销。所以空间复杂度仅仅是预先大致评估程序内存使用的大小。
2.4.2递归算法的空间复杂度分析
递归算法的空间复杂度 = 递归的深度 * 每次递归的空间复杂度
在C/C++中递归函数传递的arr数组参数是数组首元素地址,不是整个数组拷贝一份传入函数。每一层递归都共用一块数组地址空间的,所以 每次递归的空间复杂度是常数即:O(1)。

感谢Carl对于数据结构与算法的基础知识:程序的性能分析相关知识的系统讲解工作,可查看网页 linkhttps://programmercarl.com
和 linkhttps://github.com/youngyangyang04/leetcode-master 中的讲解文档。
经过系统的知识学习现对整个知识体系的掌握有了一个质的飞跃。

《代码随想录(Carl)》 数据结构与算法 程序的性能分析知识点总结相关推荐

  1. 代码随想录1刷—贪心算法篇(二)

    代码随想录1刷-贪心算法篇(二) [452. 用最少数量的箭引爆气球](https://leetcode.cn/problems/minimum-number-of-arrows-to-burst-b ...

  2. 软件性能测试分析与调优实践之路-Java应用程序的性能分析与调优-手稿节选

    Java编程语言自从诞生起,就成为了一门非常流行的编程语言,覆盖了互联网.安卓应用.后端应用.大数据等很多技术领域,因此Java应用程序的性能分析和调优也是一门非常重要的课题.Java应用程序的性能直 ...

  3. 使用gprof对程序的性能分析(集合贴)

    综述 gprof用于分析函数调用耗时,可用之抓出最耗时的函数,以便优化程序. gcc链接时也一定要加-pg参数,以使程序运行结束后生成gmon.out文件,供gprof分析. gprof默认不支持多线 ...

  4. 数据结构与算法(程序员常用的十种算法:上1~5)

    一:二分查找 二分查找算法(非递归)介绍 (1)前面我们讲过了二分查找算法,是使用递归的方式,下面我们讲解二分查找算法的非递归方法 (2)二分查找法只适用于从有序的数列中进行查找(比如数字和字母等), ...

  5. 数据结构与算法分析c++第四版_数据结构与算法 - 时空复杂度分析

    这周主要总结了时间复杂度的学习,跟小伙伴们分享下,欢迎指正. 一.为何需要分析算法复杂度 挺多同学本科都学习过数据结构和算法这门课,但是有没有想过这门课到底是解决什么问题?科学家设计这些数据结构和算法 ...

  6. 算法与数据结构(part2)--Python内置类型性能分析

    学习笔记,仅供参考 文章目录 算法与数据结构--基于python Python内置类型性能分析 timeit模块 计时器类timeit.Timer 计时器类下的timeit.Timer.timeit方 ...

  7. 【数据结构与算法】复杂度分析

    一.什么是复杂度分析? 1.数据结构和算法解决是"如何让计算机更快时间.更省空间的解决问题". 2.因此需从执行时间和占用空间两个维度来评估数据结构和算法的性能. 3.分别用时间复 ...

  8. 青岛大学_王卓老师【数据结构与算法】Week04_12_案例分析与实现2_学习笔记

    本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频. 一方面用于学习记录与分享,另一方面是想让更多的人看到这么好的<数据结构与算法>的学习视频. 如有侵权,请留言作删文处理. 课程视频 ...

  9. David P.Williams论文系列 合成孔径声纳图像快速目标检测:一种新算法及大规模性能分析

    摘要 本文提出了一种新的无监督合成孔径声纳(SAS)水下目标探测算法.该方法利用高分辨率的高质量SAS图像,这些图像上的目标有很多像素.该方法的一个特别新颖的组成部分还可以检测沙波纹并估计它们的方向. ...

最新文章

  1. leetcode-155 最小栈
  2. java struts2配置_Struts2初始化配置的问题
  3. 上海人工智能再出重磅!寒武纪科技发布新一代云端AI芯片,联想、曙光、科大讯飞发布相关应用...
  4. 剑指offer:二叉树的镜像
  5. eclipse/MyEclipse 日期格式、注释日期格式、时区问题
  6. mysql 5.6.23免安装_mysql5.6.23免安装配置
  7. 带你认识MindSpore量子机器学习库MindQuantum
  8. 移动机器人构型对比分析
  9. 20170708xlVBA添加新产品修改公式
  10. Hive高级查询(group by、 order by、 join等)
  11. python按键精灵找图教程_按键精灵如何找图 按键精灵找图教程
  12. 经典Hive-SQL面试题及答案
  13. 【你也能看得懂的电磁场与电磁波系列连载 12】
  14. position:fixed;支持ie6,清除e6下抖动。
  15. 六度分离_hdu_1869(floyd算法).java
  16. python os.getcwd用法_os.getcwd()
  17. android 手机壁纸源码,Android设置手机壁纸-源码(WallPaper)
  18. 不知道照片如何拼图?这3个方法能帮上你
  19. 形式逻辑三大基本要素-推理的本质
  20. matplotlib通过二维矩阵画散点图并且对每个点进行标记

热门文章

  1. 如何在Windows中查询证书颁发机构已颁发的证书
  2. java 科里化_关于柯里化(curry)
  3. [基础]PHP Web数据库访问编写简单示例——图书售卖系统示例[2/2]
  4. Vim插件#Vim PHP语法检测
  5. 网络营销的“万剑归宗”
  6. Markdown语法补充---字号颜色表情流程图等
  7. 海马汽车经销商管理系统技术解析(十)预约配件资源释放
  8. java模拟乒乓球比赛
  9. 某在线少儿英语培训 国内AWS云/阿里云/腾讯云 三朵云互联解决方案(一期)
  10. Springboot自动售货机后台管理系统源码带文档