首页 > 编程语言 >算法性能分析

算法性能分析

时间:2022-09-18 17:34:33浏览次数:67  
标签:分析 递归 性能 CPU 算法 内存 对齐 复杂度

算法的性能分析概括成时间复杂度和空间复杂度两部分;

  1. 时间复杂度

    通常指算法运行的时间(大O记法只保留最高次项,忽略低次项和常数项)

  2. 空间复杂度

    通常指算法在运行过程中占用内存空间大小,记做S(n)=O(f(n))。

    O(1):随着n的变化,所需开辟的内存空间并不会随着n的变化而变化,即算法空间复杂度为一个常量;eg. for (int i = 0; i < n; i++) { ... } 

    O(n):消耗空间和输入参数n保持线性增长;eg. for (int i = 0; i < n; i++) { a[i] = i; }

  3. 硬件性能(力扣上超时一般也是判断是否超过1s执行的次数,可以推算代码大概运行时间)

    CPU配置:2.7 GHz Dual-Core Intel Core i5,1 GHz = 1000MHz = 10亿Hz,(1Hz即CPU的一次脉冲,也叫时钟周期)

    计算执行代码所需的时间,例如 1+2=3(分成将1存入寄存器,将2存入寄存器,运算,保存运算结果)

    运行过程中有时间损耗,所以可推算 O(n) 大约为 5 亿左右,O(n2) 大概为 O(n) 开根号,以此类推。

  4. 递归算法

    递归算法的时间复杂度 = 递归的次数 * 每次递归的时间复杂度。(a= n 推出 b = logan)

    递归算法的空间复杂度 = 每次递归的空间复杂度 * 递归深度(每次递归所需的空间都被压到调用栈里,每次递归结束就是本次数据弹栈的过程,所以栈最大的长度就是递归的深度)。

  5. JVM

    Java 依赖JVM来做内存管理,不了解JVM内存管理的机制,很可能会因一些错误的代码写法而导致内存泄漏或内存溢出。

  6. 内存对齐

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

    硬件原因:经过内存对齐后,CPU访问内存的速度大大提升。

    注:CPU一次寻址四个字节,因此char在内存对齐的时候会产生3个空位。eg. struct node { int num; char cha;}st;st占用的内存是 4个字节(int) + 内存对齐产生的4个字节内存(char,3个内存为空)

标签:分析,递归,性能,CPU,算法,内存,对齐,复杂度
From: https://www.cnblogs.com/LinxhzZ/p/16705180.html

相关文章

  • KMP算法的底层理解
    KMP的主要思想是当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。KMP的精髓所在就是前缀表。(下面用next[]数组来表......
  • 通关基本算法 day_03 -- 二分算法
    整数二分本质如果有单调性的话-->我可以二分,反之不然整个区间可以一分为二,我们定义了一个性质,右半边是满足这个性质的,但是左半边不满足二分可以寻找这个性质的边界......
  • AcWing 算法提高课 强连通分量
    1、Tarjan算法求强连通分量: 强连通分量的点可能会向上联通。  维护两个时间戳。 ......
  • G1GC的算法与实现 pdf
    高清扫描版下载链接:https://pan.baidu.com/s/1GO-QAbmrsxH3Qvns1JATyA点击这里获取提取码 ......
  • 二--3.句型的分析
    1.规范推导和规约2.短语、简单短语和句柄3.语法树      4.子树与短语、句柄——通过树来寻找短语、简单短语、句柄......
  • 算法竞赛进阶指南 0x22 深度优先搜索
    AcWing165.小猫爬山翰翰和达达饲养了N只小猫,这天,小猫们要去爬山。经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<)。翰翰和达达只好......
  • 算法中的最优化方法01
    算法中的最优化方法0100课程简介优化尽可能用最佳的方式处理一下事项计算机中基于优化的算法多准则控制器的设计模糊建模中的聚类机器人轨迹规划流程工业中的调度......
  • aardio调用百度云人脸识别(api认证机制authorization算法)
    功能:调用百度云识别里的人脸识别api 这里同时分享给需要的人:namespacebaiduimportinet.urlimporttime.zoneimportcrypt.hmacimportcrypt.binstring=........
  • aardio高性能计数器演示
    //高性能计数器演示importconsole;importtime.performance;vartk=time.performance.tick();sleep(2000)console.log((time.performance.tick()-tk)/......
  • 深度学习:计算性能
    1、命令式和符号式混合编程命令式编程,它使用编程语句改变程序状态:defadd(a,b):returna+bdeffancy_func(a,b,c,d):e=add(a,b)f=add(c,d)......