算法的渐进分析
f(n)=n^2+100n+log10n+1000
1.数据规模n逐步增大时,f(n)的增长趋势
2.当n增大到一定值以后,计算公式中影响最大的就死n的幂次最高的项 - 其他的常数项和低幂次项都可忽略
算法渐进分析:大O表示法
1.函数f,g定义域为自然数,值域为非负实数集
2.如果存在正数c和n0,使得对任意的n>=n0,都有
f(n)<=cg(n)
3.大O表示法:表达函数增长率上限
- 一个函数的增长率的上限可能不止一个
4.当上,下限相同时则可用Θ表示法
5.f(n)=O(gn),当且仅当
- 存在两个参数从c>0,n0>0,对于所有的n>=n0,都有f(n)<=cg(n)
大O表示法的单位时间
1.简单布尔或算术运算(O(1))
2.简单I/O
- 指函数的输入/输出
例如,从数组读书数据等操作
- 不包括键盘文件等I/O
3.函数返回
大O表示法的运算法则
1.加法规则:f1(n)+f2(n)=O(max(f1(n),f2(n)))
- 顺序结构,if结构,switch结构
2.乘法规则:f1(n)*f2(n)=O(f1(n)*f2(n))
- for,while,do,do-while结构
for(i=0;i<n;i++)
for(j=i;j<n;j++)
k++:
算法渐进分析:大Ω表示法
1.定义:如果存正数c和n0,使得对所有得n>=n0,都有f(n)>=cg(n),则称f(n)在集合Ω(g(n))中,或简称f(n)是Ω(g(n))的,或f(n)=Ω(g(n))
2.大O表示法和大Ω表示法的唯一区别在于不等式的方向而已
3.采用大Ω表示法时,最好找出函数增率的所有下限中那个最“紧”(即最大)的下限
4.f(n)=Ω(g(n))
- 存在c,n0>0 对任意n>=n0,0<=cg(n)<=f(n)
5.与大O表示法的唯一区别在于不等式的方向
算法渐进分析:大Θ表示法
1.当上,下限相同时则可用Θ表示法
2.定义如下:
如果一个函数既在集合O(g(n))中又在集合Ω(g(n))中,则称为Θ(g(n))
3.也即,当上,下限相同时则可用大Θ表示法
4.存在正常数c1,c2,以及正整数n0,使得对于任意正整数n>n0,有下列两不等式同时成立:
c1g(n)<=f(n)<=c2g(n)
5.f(n)=Θ(g(n))
- 存在c1,c2,n0>0 使得 0<=c1g(n)<=f(n)<=c2g(n), 对任意n>=n0
6.上,下限相同,则可用Θ表示法