算法概念
程序=数据结构+算法--->数据结构描述,算法处理解决问题
算法是对待定问题求解步骤的一种描述
特性:
有穷性、确定性、可行性【0输入1输出】
好的算法特质
正确性、可读性【有注释】、健壮性【出现非法数据】、高效率与低存储量需求【时间复杂度低,空间复杂度低】
算法时间复杂度
代码-算法一:逐步递增型爱你3000遍
Q1:当问题规模n足够大时,是否可以忽略表达式某些部分?
T1(n)= 3n+3 ≈3n/n ……可以只考虑阶数高部分
O表示同阶,同等数量级==当n趋于无穷大时,二者比为常数O(n)
加法规则
- --只保留最高阶一项并系数为1
- 算法时间复杂度越大,程序越差
- 口诀::常对幂指阶--->
- 忘记上面可以用洛必达法则将两个函数以极限的方式相除n->无穷,为0则下面的大
乘法规则
- --都保留:O(nlog^2n)
Q2:如果代码很多行,不能一行一行数,应该怎么办?
- 顺序执行的代码只会影响常数项,忽略
- 只看循环中的一个基本操作分析它执行次数与n关系
- 若有多层循环嵌套,只关注最深层循环循环了几次
- 循环次数的数量级就是算法时间复杂度,看i++/++i判断是否要+1-->也无所谓
- 算法1递增型中 T(n) = 3n+1003=O(n)---->是3n与n同阶
- 算法2嵌套循环型 T(n)= O(n)+O(n^2) = O(n^2)
代码:算法2--嵌套循环型爱你
三种复杂度【查找数据的话根据输入数据不同判断】
- 最坏时间复杂度
- 平均时间复杂度
- 最好时间复杂度