算法效率|时间复杂度&空间复杂度

(摘自浙大数据结构慕课)
在这里插入图片描述
空间复杂度

S(n)=C×N

  • 递归
    这里引用《算法竞赛入门经典(第2版)》中的描述:

如果在递归调用初期查看调用栈,则会发现每次递归调用都会多一个栈帧。在C语言的函数中,调用自己和调用其他函数并没有任何本质区别,都是建立新栈帧,传递参数并修改当前代码行。在函数体执行完毕后删除栈帧,处理返回值并修改当前代码行。调用栈所在的段称为堆栈段(Stack Segment)。和其他段一样,堆栈段也有自己的大小,不能被越界访问,否则就会出现段错误。

如下图,当N过大时,计算机甚至不会返回结果——段错误。(递归的弊端)
在这里插入图片描述

  • (c语言)比较大的数组应尽量声明在main函数外,否则程序可能无法运行。

在递归中提到堆栈段以及栈溢出。而栈溢出不一定是递归调用太多,也可能是局部变量太大,局部变量也存放在堆栈段中。换言之,只要总大小超过允许范围,就会产生栈溢出。

时间复杂度

  • 初级:对于一般函数而言,只需分析乘除法的次数(加减法速度比乘除快很多,可以忽略不计)。
    在这里插入图片描述
    在研究一个算法的效率时往往选择分析最坏情况复杂度:最坏情况复杂度往往比平均复杂度方便计算。

  • 高级:对算法不做精细的分析,只需知道随着数据规模的增长,时间增长的大致趋势。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

发布了25 篇原创文章 · 获赞 5 · 访问量 1685

猜你喜欢

转载自blog.csdn.net/qq_43611144/article/details/97100657