12/25 分析算法时间复杂度的基本方法

发布时间:2023年12月26日

分析算法时间复杂度的基本方法:

? ? ? ??若f(n)=a_{m}n^{m}+a_{m-1}n^{m-1}+...+a_{1}n+a_{0}是m次多项式,则T(n)=O(n^{m}

? ? ? ? 忽略所有低次幂和最高次幂的系数,体现出增长率的含义!

1.找出语句频度最大的那条语句作为基本语句

2.计算基本语句的频度得到问题规模n的某个函数f(n)

3.取其数量级用符号“O”表示

?时间复杂度是由嵌套最深层语句的频度决定的

算法中的基本操作语句为c[i][j]=c[i][j]+a[i][k]*b[k][j];

T(n)=\sum_{i=1}^{n}\sum_{j=1}^{n}\sum_{k=1}^{n}1=\sum_{i=1}^{n}\sum_{j=1}^{n}n=\sum_{i=1}^{n}n^{2}=n^{3}=O(n^{3})

算法时间复杂度 :

最坏时间复杂度:指在最坏情况下,算法的时间复杂度。

平均时间复杂度:指在所有可能输入实例在等概率出现的情况下,算法的期望运行时间,

最好时间复杂度:指在最好情况下,算法的时间复杂度。

一般总是考虑在最坏情况下的时间复杂度,以保证算法的运行时间不会比它更长。

?对于复杂的算法:

? ? ? ? 可以将它分成几个容易估算的部分,然后利用大O加法法则和乘法法则,计算算法的时间复杂度:

? ? ? ? 1.加法规则:

? ? ? ? T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n));

? ? ? ? 2.乘法规则

? ? ? ? T(n)=T1(n)×T2(n)=O(f(n))×O(g(n))=O(f(n)×g(n));

算法时间效率的比较

当n取得很大时,指数时间算法和多项式时间算法在所需时间上非常悬殊!

nf(1)f(logn)f(n)f(nlogn)f(n^{2})f(n^{3})f(2^{n})f(n!)
110101121
211224842
4124816641624
8138246451225640320
161416642564096655362.0923E+13
3215321601024327684.295E+092.6313E+35

时间复杂度T(n)按数量级递增顺序为:

复杂度低? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 复杂度高

-------------------------------------------------------------------------------------------------------------------------\rightarrow

常数阶对数阶线性阶线性对数阶平方阶立方阶...K次方阶指数阶
O(1)O({log_{2}}n)O(n)O(nlog_{2}n)O(n^{2})O(n^{3})O(n^{k})O(2^{n})

渐进空间复杂度:

空间复杂度:算法所需存储空间的度量。

? ? ? ? 记作:S(n)=O(f(n))

其中n为问题的规模(或大小)

算法要占据的空间:

算法本身要占据的空间,输入/输出,指令,常数,变量等

算法要使用的辅助空间

算法空间复杂度分析例题

将一维数组a中的n个数逆序存放到原数组中

算法1

for(i=0;i<n/2;i++){
    t=a[i];
    a[i]=a[n-i-1];
    a[n-i-1]=t;
}

//S(n)=O(1) 原地工作

?

?算法2

for(i=0;i<n;i++)
    b[i]=a[n-i-1];
for(i=0;i<n;i++)
    a[i]=b[i];

//S(n)=O(n)

?算法1的空间效率要高于算法2的空间效率;

?

?

文章来源:https://blog.csdn.net/nanshenchao/article/details/135199721
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。