定义:
例1 :选择排序的伪码描述
什么是好的算法?
- 空间复杂度S(n): 根据算法写成的程序在执行时
占用存储单元的长度。这个长度 往往与输入数据的
规模有关 。空间复杂度过高的算法可能导致使用的
内存超限,造成程序非正常中断 - 时间复杂度O(n): 根据算法写成的程序在执行时
耗费时间的长度。这个长度 往往也与输入数据的规
模有关 。时间复杂度过高的低效算法可能导致我们
在有生之年都等不到运行结果
递归输出 1~100000 :
调用函数之前,系统需要将当前这个函数所有的现有的状态都存到系统内存的某个地方。当前状态先存下来后,系统才会执行PrintN(N-1)函数,执行完了以后,系统会将这些存储的状态再恢复回来,接着执行函数的下一句。
系统所用空间随N作线性增长,当N很大时,程序所用空间有限,有限空间用爆后,非正常退出。
第一段代码中,每次循环都有 i 次乘法,求和公式计算出时间复杂度,当N很大时,时间复杂度为N*N。
第二段代码中,每次循环都只有 1次乘法,求和公式计算出时间复杂度为N。
什么是好的算法?
复杂度的渐进表示法:
复杂度函数关系
我们应该逐步培养主动降低复杂度的意识,例如,当前复杂度是N * N,先想办法降为 N * log N,再降为N。
复杂度分析小窍门: