算法的定义
给定计算问题,算法是一系列良定义的计算步骤,逐一执行计算步骤即可以得到预期输出
算法可以把输入变成我们想要的输出的效果的一系列步骤。
算法的性质
- 有穷性:算法必须在有限个计算步骤后终止
- 确定性:算法必须是没有歧义的
- 可行性:可以机械的一步一步执行基本操作步骤
算法的表示
- 自然语言:人类语言描述算法步骤,但是问题庞大容易产生歧义
- 机器语言:机器语言众多,c,java等,不同语言编写的算法,对学习算法着对语言的掌握程度高,不易于算法思想的学习
- 伪代码(使用):代码与自然语言的结合,更好。
算法的分析
- 空间复杂度:对内存需求的大小
- 时间复杂度:对运算时间长短的比较(我们主要分析)
针对时间复杂度的分析:
我们计算一些基本操作的时间,比如:加减乘除运算,赋值,比较。每次机器运算都表示为消耗一个单元,加起来算法总的消耗单元,再做比较。
我们假设时间复杂度只与输入规模(n)有关,输入情况有:
- 最好情况
- 一般情况
- 最坏情况
时间复杂度用函数T(n)表示
算法分析的工具:
渐进分析:忽略T(n)的系数和低阶项,仅关注高阶项,用记号θ表示
渐进记号:
- 渐进紧确界:T(n)=θ(g(n))【c1g(n)<=T(n)<=c2g(n)】
- 渐进上界:T(n)=O(g(n))(常用)【0<=T(n)<=cg(n)】
- 渐进下界:T(n)=Ω(g(n))【0<=cg(n)<=T(n)】
计算机是以二进制为计算的,所以我们把log以2为底的n,记为符号logn(换底公式,提出常数在计算中会常用)
算法中的O(1), O(n),O(logn), O(nlogn)分别是什么意思
算法分析例题:
复杂度的比较方法:
- 取对数
- 求积分
- 求极限
- 放缩法
给出一个例子:(将函数分为常数阶、对数阶、多项式阶和指数阶)