程序性能


程序性能包括两个部分:空间效率和时间效率

1、程序性能

1.1 空间效率

一个运行的程序所占用的内存

1、栈,函数调用时操作系统自动分配的内存
函数调用层次越深,栈需要的内存也就越多,典型的形式的函数递归
总结:程序栈设计考虑
递归函数评估可能存在的最大的递归深度,从而计算需要的栈内存上限
非递归函数评估最大的调用深度,从而计算栈内存上限

2、堆,用户申请的动态内存
用户使用类似malloc函数或者brk函数等动态内存
总结:程序堆设计考虑
根据具体的应用场合评估动态内存分配的次数与最大分配量

3、程序镜像 ,可执行程序占用内存空间

  • 4、运行时内存统计技巧

1.2 时间效率

程序时间包括两个方面:编译时间和运行时间

  • 编译时间
    源代码编译生成可执行文件的时间;
    编译时间只会影响开发效率,一般来讲大型工程编译时间可能相当漫长。一般时间效率评估可以不计算编译时间

  • 运行时间
    评估某一个具体的执行单元需要的时间,比如一个函数:可以使用两种方式评估
    其一,比较操作计数:t = n1*(加法操作) + n2(乘法操作)+n3(比较操作)…
    其二,比较某个程序片段执行次数

1.3 f(n) 程序性能表示

f (n) 表示一个程序的时间或空间复杂性,它是实例特征n的函数

  • 大写O符号:大写O 符号给出了函数f的一个上限

    [线性函数]
    对于函数f (n) = 3n+ 3,当n≥3时,有3n+ 3≤3n+n= 4n,所以f (n)= O (n)
    [平方函数]
    定f (n) = 10n2 + 4n + 2 。对于n≥n0 = 5,f (n) ≤1 0n2 + n2 = 11n2 ,所以f (n)= O (n2 )。
    [指数函数]
    考察一个具有指数复杂性的例子f (n)= 6 * 2n + n2 。对于n≥4,有f (n)≤ 6 * 2n + 2n = 7 * 2 n ,因此6 * 2n+ n2 = O (2^n )
    [常数函数]
    当f (n)是一个常数时,比如f (n) = 9或f (n) = 2 0 3 3,可以记为f (n)=O (1)

  • Ω符号
    Ω符号与大O 符号类似,它用来估算函数f 的下限值。同O符号相近

    [线性函数]
    对于函数f (n) = 3n+ 3,对于所有的n,有f (n) = 3n+ 2 > 3n,因此f (n) = Ω(n)。

    [平方函数]
    对于所有的n≥0,有f (n) = 10n2 + 4n+ 2 > 1 0n2,因此f (n)=Ω (n2 )。

    [指数函数]
    f(n)=6 * 2^n +n2 > 6 * 2^n … Ω ( 2^n )。

一般来讲,时间复杂度围绕上限以及下限分析即可!

举例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值