走进数据结构和算法(c++版)(1)――算法时间复杂度

匿名 (未验证) 提交于 2019-12-03 00:18:01

算法时间复杂度定义
T(n)是关于问题规模n的函数,进而分析T(n)n的变化情况并确定T(n)的数量。算法的时间复杂度。也就是算法的时间量度,记做:T(n)=O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。 其中f(n)是问题规模n的某个函数。

T(n)随问题规模n增加的变化趋势。一般情况下,随着n的增大,T(n)增长最慢的算法为最优算法。

  1. 用常数 1 取代运行时间中的所有加法常数。
  2. 再修改后的运行次数函数中,只保留最高阶项。
  3. 如果最高阶项存在且不是 1 ,则去除与这个项相乘的常数。

时间复杂度O(1)

int a=1,b=3,sum=0;//执行1次 sum=a+b;//执行1次 cout<<"sum="<<sum<<endl;//执行1次

时间复杂度O(n)

for(int i = 0; i < n; i++)//执行n次 {     cout<<i<<endl; }   

时间复杂度O(n2)

for(int i = 0; i < n; i++)//执行n^2次 {     for(int j = 0; j < n; j++)     {         cout<<i<<endl;     } }   

O(n),则n层嵌套的时间复杂度为O(nn)

时间复杂度O(logn)

int i=1; while(i<n) {     i=i*2; }

2x<n时结束循环。所以总共执行了x=log2n次,所以其时间复杂度为O(logn)


O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)

最坏情况

平均情况

递归算法的时间复杂度求解



T(n)=aT(n/b)+f(n)

a1b>1是常数,f(n)是渐近正函数。

  1. 若对某个常数ε>0,有f(n)=O(n(logba)ε),则T(n)=Θ(nlogba)
  2. f(n)=Θ(nlogba),则T(n)=Θ(nlogbalgn)
  3. 若对某个常数ε>0,有f(n)=Ω(n(logba)+ε),且对于某个常数c<1和所有足够大的naf(n/b)cf(n),则T(n)=Θ(f(n))

T(n)=4T(n/2)+n,其中a=4,b=2,logba=2。当ε=1,有O(n(logba)ε)=O(n(log24)1)=O(n)。符合第一种情况所以T(n)=Θ(n2)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!