算法的时间与空间复杂度

本文详细介绍了算法的时间复杂度和空间复杂度。时间复杂度分析包括算法执行时间、频度、问题规模与时间复杂度的关系,以及计算方法如求和法则、乘法法则等。同时提到了算法的时间复杂度受问题数据初始状态影响,导致最好、最坏和平均状态的时间复杂度概念。空间复杂度则是衡量算法运行过程中临时占用存储空间的大小,关注辅助空间的使用。
摘要由CSDN通过智能技术生成


算法的时间与空间复杂度


一、算法的时间复杂度



1、算法的执行时间和频度

!*首先明确一下一些专业术语的概念

*算法的执行时间=所有语句执行时间的总和

*语句执行时间=该语句重复执行次数×该语句每执行一次所需时间

*频度:一条语句重复执行的次数

!*(!*在本文中代表要注意的知识点)算法实际所需的具体时间与机器的软硬件环境(机器速度、编译程序质量等)相关;因此可以设每条语句执行一次所需时间是单位时间,所以一个算法的执行时间即所有语句频度之和。


2、问题规模和算法时间复杂度

*规模(有些书中称之为模块):算法求解问题的输入量。通常用n表示。

例:

矩阵的阶数;多项式的项数;排序时数的个数;一个图中的顶点数或边数;集合中的元素个数。


*数量级‘O ':

数学定义:若Tn)和fn)是定义在整数集合上的两个函数,则Tn=Ofn))表示,存在常数c>0n0,使得当n>n0时都满足0<=T(n)<=cf(n).

*时间复杂度:一个算法的时间复杂度是该算法的执行时间。记作Tn)(该函数是n的函数)。设一个函数是f(n)(找的这个函数是为了方便我们进行比较),T(n)f(n)是同阶的(此处可联系高数求极限时的同阶无穷小,即两函数相除,当n→∞时,极限为常数c),则可说T(n)f(n)的数量级相同,记作:

T(n)=O(f(n))

T(n)称为算法的渐近时间复杂度,简称时间复杂度。

!*上面公式可以这样理解:随着模块n的增加,算法执行时间的增长率和fn)的增长率成正比,所以fn)越小,Tn)越小,算法效率越高。

psTn)与fn)都是增长的,当过了某一个点时两个函数的函数值成正比,每点的增长率自然也成正比,不过前提是n→∞,n没有足够大时,是体现不出来的。

例:

Tn=2n^3+3n^2+2n+1

f(n)=n^3

limT(n)/n^3=lim(2n^3+3n^2+2n+1)/n^3=2;

*lim符号下应是n→∞

通过上式便可记为Tn=On^3.


3、时间复杂度计算方法

*步骤

1)、先跟据算法确定它的执行次数(其实只要保证基本语句执行次数中最高次幂正确即可,即频度最大的语句的次数,其实这个可以联系上个例子,其余项的极限为0,所以可以忽略)。

2)、找出Tn)的同数量级,通常有以下函数:

O(1)<O(log2n)<O(n)<O(nlog2n)<O(n^2)<O(n^3)<...<O(n^k)<O(2^n)<O(n!)

!*O(log2n),O(n),O(nlog2n),O(n^2),O(n^3)称为多项式时间,而O(2^n)O(n!)称为指数时间。前者为有效算法,为P类问题,而后者,当n无限大时可以想象其速度增长之快,为NP类问题。


*求算法的一些计算法则

1、对于一些简单的输出输入算法或算法中不存在循环语句,其时间复杂度就认为是O1)。

2、对于顺序结构,需要依次执行的语句可用求和法则

*求和法则

若算法的2个部分的时间复杂度分别为T1n=Ofn)),T2n=Ogn))则

T1n+T1n

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值