算法与数据结构入门
- 抽象:归结一类数据的最本质的东西
- 抽象数据类型:一个数学模型以及定义在此模型上的一组操作。
引用参数以&打头,可以返回操作值。
渐近时间复杂度
算法执行次数最多的语句,分析其渐近时间复杂度
时间复杂度是由嵌套最深层语句的频度决定的
n越大,算法的执行时间越长。
- 排序:n为记录数
- 矩阵:n为矩阵的阶数
- 多项式:n为多项式的项数
- 集合:n为元素个数
- 树:n为树的结点个数
- 图:n为图的顶点数或边数
分析算法时间复杂度的基本方法
- 找出语句频度最大的那条语句作为基本语句
- 计算基本语句的频度得到问题规模n的某个函数f(n)。
- 取其数量级用符号“O”表示
eg:计算下列时间复杂度:
eg2:
算法时间复杂度考虑: - 最坏时间复杂度(通常)
- 平均时间复杂度
- 最好时间复杂度
复杂度分析
O(1)>O(log2n)>O(n)>O(nlog2n)>O(n2)>O(n3)>…>O(nK)>O(2n)
算法的空间复杂度
定义:算法所需存储空间的度量
S(n)=O(f(n))
算法要占据的空间
- 算法本身要占据的空间,输入/输出,指令,常数,变量等
- 算法要使用的辅助空间
eg1:
eg2:
S(n)=O(1),原地工作
S(n)=O(n)