数据分析学习总结笔记11:空间复杂度和时间复杂度
本文较简略,具体可参照:算法的时间复杂度和空间复杂度-总结
1 算法与程序
(1)算法:是解决问题的方法或过程,严格的讲是满足下述性质的指令序列:
- 输入:有零个或多个外部量作为算法的输入;
- 输出:算法产生至少一个量作为输出;
- 确定性:组成算法的每条指令清晰、无歧义;
- 有限性:算法中每条指令的执行次数有限,执行每条指令的时间也有限。
- 可行性。
(2)程序:是算法用某种程序设计语言的具体实现。程序可以不满足算法的有限性。
(3)问题求解周期:问题简化、模型构建、算法设计、程序升级和测试等过程。(抽象→建模→算法→实现→验证)。
2 算法复杂度概述
算法复杂度是算法运行所需要的计算机资源的量,需要时间资源的量称为时间复杂度,需要的空间资源的量称为空间复杂度。
- 时间复杂度和空间复杂度是只依赖于算法求解的问题规模和算法输入的函数。
- N、I分别表示算法求解的问题规模和算法输入,则算法的时间复杂度T和空间复杂度S可以分别表示为:T=T(N,I), S=S(N,I)。
3 时间复杂度
影响算法执行时间的相关因素:
(1)算法选用的策略
(2)问题规模
(3)编写程序的语言
(4)编译程序产生的机器代码的质量
(5)计算机执行指令的速度
时间复杂度不应该是在特定计算机上求解某一个输入实例所需要的运行时间;而应该是一个不依赖于计算机配置、问题规模和输入实例的抽象表示。
3.1 时间复杂度记号O
3.2 时间复杂度的计算
3.3 时间复杂度的类别
3.4 时间复杂度分析实例
(1)非递归算法
(2)递归算法
4 空间复杂度
空间复杂度一般不做太多计算。