【代码随想录】第2章:程序的性能分析

简介: 【代码随想录】第2章:程序的性能分析

第二章 程序的性能分析


时间复杂度


理论上是指算法的最坏情况,即上界


但平时指的是一般情况


例如:


插入排序 一般情况:O(n^2) 最好情况:O(n) 最坏情况:O(n^2)


快速排序 一般情况:O(n^2) 最好情况:O(nlogn) 最坏情况:O(n^2)


按理来说,快排时间复杂度应该是O(n^2);但是业界习惯把快排的时间复杂度默认为O(nlogn)


时间复杂度还与数据规模有关


注意:logn是忽略底数的


注意:面试不要说不会;换成,可不可以给点提示


递归算法的时间复杂度本质上要看递归的次数与每次递归中的操作次数的乘积


内存管理


程序运行时所需的内存空间分为固定部分和可变部分


固定部分的内存消耗不会随着代码运行而产生变化,而可变部分会产生变化。


固定部分:


代码区:存储二进制代码


数据区:全局变量,静态变量,常量等


可变部分:


栈区:运行方法的形参,局部变量,返回值,以及递归栈所需的空间。系统自动分配与回收


堆区:动态开辟的空间,存放new出来的对象在堆区中的真实数据。需要手动回收


固定部分占用空间固定,占用的空间非常小。运行时消耗的内存主要取决于可变部分。


堆区因为需要手动回收内存,所以容易出现内存泄漏


数据类型大小


编译器类型 char short int long float double 指针
32位编译器 1字节 2 4 4 4 8 4
64位编译器 1字节 2 4 8 4 8 8


1字节byte=8bit


内存对齐


面试问题:为什么要内存对齐


(1)平台原因:不是所有的硬件平台都能访问任意内存地址上的数据,某些平台只能在一些地址处获取特定类型的数据,否则抛出硬件异常。为了使同一个程序可以在多个平台运行,需要进行内存对其。


(2)硬件原因:进程内存对其后,CPU访问内存的速度会大大提升。


内存对其也是空间换时间


空间复杂度


程序运行时占用内存的大小;而不是程序的可执行文件的大小。


递归算法的空间复杂度=每次递归的空间复杂度×递归深度


空间换时间


是常用的优化方法


在哈希法中,数组,set,map等容器都是以空间换时间的思路。

目录
相关文章
|
2月前
|
数据可视化 PyTorch Serverless
Python 性能分析的几个方法,找到你代码中的那个她
我们在编写了一个脚本在笔记本上处理一些数据,然后去喝杯咖啡或者上了个厕所,15分钟后回来时发现进度才完成不到10%。 我们的脑袋里面就会发问:为什么这么慢?究竟是在哪个部分是慢的?是读取数据、处理数据还是保存数据?如何让它变快?它真的很慢吗? 有了这个疑问我们尝试去解决这个问题,下面我们介绍几个 python 性能分析的工具。
|
4月前
|
存储 算法 C++
程序性能分析
1. 什么是程序性能 程序性能指的是程序在执行过程中所消耗的时间和资源的多少。一个好的程序应该能够在较短的时间内完成所需的任务,并且尽可能地利用少量的资源。
67 3
|
传感器 存储 算法
【无人机】无人机平台的非移动 GPS 干扰器进行位置估计的多种传感器融合算法的性能分析(Matlab代码实现)
【无人机】无人机平台的非移动 GPS 干扰器进行位置估计的多种传感器融合算法的性能分析(Matlab代码实现)
124 0
|
监控 Java Linux
Java程序性能分析:内存
开发Java项目过程中,难免会碰到一些 性能 问题,这时候就需要一些工具,帮忙排查。本文主要介绍 JDK自带的上古神器 jstat、jmap,另简单介绍 MAT、gceasy、HeapDump 等
942 5
|
PHP 数据库 开发者
Laravel 使用 Debugbar、Blackfire 性能分析定位程序问题
本文介绍了如何使用 Laravel 的 Debugbar 和 Blackfire 工具进行性能分析和排查程序问题。通过详细的代码示例和演示的代码执行结果,展示了如何使用这些工具以及它们的常见实用方法。
444 1
|
机器学习/深度学习
【GUI】用于电动助力车性能分析的GUI(Matlab代码实现)
【GUI】用于电动助力车性能分析的GUI(Matlab代码实现)
|
机器学习/深度学习 传感器 算法
【直扩通信】直扩通信系统信号捕获性能分析附matlab代码
【直扩通信】直扩通信系统信号捕获性能分析附matlab代码
|
机器学习/深度学习 Web App开发 JSON
Paddle模型性能分析工具Profiler:定位瓶颈点、优化程序、提升性能
1.Paddle模型性能分析工具Profiler:定位瓶颈点、优化程序、提升性能
|
搜索推荐 Java 测试技术
使用JDK自带的VisualVM进行Java程序的性能分析
使用JDK自带的VisualVM进行Java程序的性能分析
121 0
使用JDK自带的VisualVM进行Java程序的性能分析
|
数据采集 算法 Java
火焰图对 Go 程序进行性能分析
火焰图对 Go 程序进行性能分析
1343 0
火焰图对 Go 程序进行性能分析