数据结构(C语言):时间复杂度概念理解,附经典例题

时间复杂度是衡量算法效率的重要概念,主要关注随着问题规模n的增长,算法执行时间的增长率。大O记法用来表示算法的时间复杂度,通过忽略低阶项和常数项,只保留最高阶项来描述算法的最坏情况运行时间。文章提供了多个示例,如循环和嵌套循环的算法,分析它们的时间复杂度,例如1和2的时间复杂度为O(n),3和4为O(n^(1/2)),5为O(n^3),6也为O(n^3)。
摘要由CSDN通过智能技术生成

什么叫算法的时间复杂度?怎样表示算法的时间复杂度?

算法的时间复杂度

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

学过高等数学的小伙伴可以试着用极限的思想来理解。

表示算法的时间复杂度

用大写O()来体现算法时间复杂度(大O记法)。

推导大O阶的具体步骤

(1)用常数1取代运行时间中的所有加法常数。

(2)在修改后的运行次数函数中,只保留最高阶项。

(3)如果最高阶项存在且其系数不是1,则去除与这个项相乘的系数。得到的结果就是大O阶。

经典例题

设n为已在算法前面定义的整数类型,并已知n为正整数,表示问题的规模,分析以下各算法的时间复杂度T(n)。(答案在最后)

1

int sum1( int n )

{   int  p=1, sum=0, m ;

for (m=1; m<=n; m++)

{  p*=m ; sum+=p ;  }

return (sum) ;

}

 

2

Void fun1(int n)

{  int   i=0,k=0 ;

while(i<n-1)

{   k=k+10*i ;

i++ ; 

}

}

 

3

int fun2(int n)

{  int i=1,j=1 ;

while(i*i<=n)

{   i++ ;  j++  }

   return j ;

}

 

4

int sun2(int n)

{  int  x=n,y=0 ;

while(x>=(y+1)* (y+1))

y++ 

}
5

//设表示n阶矩阵数组a和b已经赋值,求矩阵相乘的程序段的时间复杂度。

for (i=0 ;i<n ;i++)

   for (j=0 ;j<n ;j++)

{  c[i][j] =0 ;

   for (k=0 ;k<n ;k++)

   c[i][j]= c[i][j]+a[i][k]*b[k][j]  ;

}

 

6

int sun2(int n)

{   int sum=0, m, t ;

for (m=1; m<=n; m++)

{   p=1 ;

for (t=1; t<=m; t++)

            p*=t ;  sum+=p ;

}

return (sum) ;

}

 

答:1、T(n)=O(n)

2、T(n)=O(n)

3、T(n)=O(n^(1/2) )

4、T(n)=O(n^(1/2) )

5、T(n)=O(n^3 )

6、T(n)=O(n^3 )

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值