一、算法的基本概念
程序=数据结构+算法
数据结构:需要处理的信息
算法:求解问题的步骤
1.算法的特性
1)有穷性
2)确定性:对于相同的输入一定要有相同的输出
3)可行性:操作通过已经实现的基本运算执行有限次
4)输入
5)输出
好算法的特质:
1.正确性
2.可读性 hhh说不写注释代码是piece of shit
3.健壮性:对非法数据进行处理
4.高效率和低存储需求
高效率:时间复杂度低,低存储需求:空间复杂度低
二、时间复杂度:
事前预估算法时间开销T(n)与问题规模n的关系
算法的时间开销表达式可以只考虑阶数高的部分(抓大头hhh)
抓大头T(n)=O(n),O表示同阶,当n趋于无穷T(n)与O(n)之比为常数
常<对<幂<指<阶
顺序执行执行的代码只会影响到常数项,在n趋于无穷的时候可以忽略
只需要看循环里面的基本操作分析它的额执行顺序与n的关系就行
如果有多层嵌套循环只需要关注最内层循环循环了几次
三、空间复杂度:
程序代码+数据
算法原地工作:算法所需内存空间为常量S(n)=O(1)
普通程序:x的数量级O(x)就是算法空间复杂度S(n)
递归程序:空间复杂度=递归调用的深度