什么是算法?
对问题求解步骤的描述,通过有限序列的指令来实现
特征:
- 有穷性:有限,不重复循环
- 确定性:每个步骤都是明确无歧义的
- 可行性:计算机能实现的算法
- 输入:被计算机处理的各种类型数据
- 输出:计算机处理后输出的结果
算法的复杂度
时间复杂度
用于衡量当问题规模不断增大,算法执行时间增长的快慢。记作T(n),则时间复杂度主要分析T(n)的数量级。T(n)=O(f(n)),大O记法,f(n)是算法中基本运算的频度,一般考虑最坏情况下的时间复杂度
计算方法:取算法中时间增长最快的那个函数项,把它的系数改为1
空间复杂度
用于衡量算法随着问题规模增大,算法所需空间的增长的快慢,S(n)=O(g(n))。
时间复杂度大小关系:
O(1)<O(log2n)<O(nlog2n)<O(n^2)<O(n^3)<O(2^n) 从左至右,时间性能依次降低
复杂度的计算
时间复杂度:
复杂度是关于增长率的,所以直接忽略常数项,只关注问题规模
一般可以直接关注循环段基本操作语句的执行次数
1)单个循环体:
直接关注循环体的执行次数
2)多个循环体:
运算规则:乘法规则,加法规则
两个循环体是独立的,采用加法规则:T(n)=T1(n)+T2(n)=max(T1(n),T2(n))
两个循环体是嵌套的,采用乘法规则:T(n)=T1(n)*T2(n)
空间复杂度:
算法运算过程中使用的辅助空间的大小
S(n)=O(f(n))