您的位置:首页 > 其它

时间复杂度分析

2016-03-05 09:44 267 查看
刚开始学习数据结构顺便把自己的新的体会写下来。
而对于数据结构而来算法的分析便是我们研究算法的基础,在这里把我对算法分析的方法做点归纳
算法是对计算机性能和资源利用的研究。
1   渐进时间复杂度
//EX:给出一个长度为N的序列,求最大连续和

int tot=0;//记录元素个数
int best=A[1];//初始最大值
for(int i=1;i<=n;i++)//
for(int j=i;j<=n;j++)//检测子序列
{
int sum=0;
for(int k=i;k<=j;k++)
{
sum+=A[k];tot++;//累加元素和
}
if(sum>best)
best=sum;//更新最大值
}
题中我们用tot来计算累加计算的次数,同时我们也可以通过数学渐进运算来给出计算的答案这就是渐进分析
T(n)=n*(n+1)*(n*2)/6,很明显这是一个n^3方的数,所以我们可以用T(n)=Θ(n^3);
2   上界分析

上界分析就是worse-case下的程序分析,首先该算法包涵3重循环,中层最坏需要进行n次循环,最内层最坏也是需要n次循环,所以总的运算次数不大于n^3.这里我们采用的就是上界分析的方法。在算法分析中我们一般不需要得到精确的数值,只用的到算法的上届,有时我们得到的上界约等于精确计算来的上界,我们称之为紧的上界,同时我们也可能得到松的上界。我们通过修改程序对松的上界进行加紧的过程叫做优化。

3   递归时间复杂度的分析

主方法:主方法并不是一个万能的方法,它一般只适用于 T(n)=aT(n/b)+f(n);格式的递归,不过它对于一些递归的时间复杂度可以快速给出答案,在这里我就不画解答数来证明了,有需要的可以留言

case 1  n^logba>f(n)  T(n)=Θ( n^logba);
case 2  n^logba=f(n)  T(n)=Θ(n^logba*lgk+1n);
case 3  n^logba<f(n)  T(n)=Θ(f(n));

EX:  T(n)=aT(n/b)+f(n);
T(n)=4T(n/2)+n;
n^log24=n^2>n       such that     T(n)=Θ(n^2)
代换法:它在大多数的情况下是有效的,但是我们必须首先要知道答案,也就是说我们必须首先猜出答案,所以你要猜对它,然后使用数学归纳法进行验证,最后一步也是最重要的是找到一个常数使之成立。
EX: T(n)=4T(n/2)+n;
猜     T(n)=o(n^3)
T(k)=c*k^3  k<n  我们需要证明的是K=n的情况
T(n)=4c*(n/2)^3+n;
=1/2*c*n^3+n;
c*n^3-()<c*n^3
所以我们只需要证明()里的数是正数
()=1/2*c*n^3-n;所以c大于1时成立.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: