【数据结构】第一篇:求解时间复杂度(一)

定义

       一个语句的频度指的是该语句在算法中被重复执行的次数。算法中所有语句的频度之和记为T(n),这是该算法问题规模n的函数,时间复杂度主要分析T(n)的数量级。
       记为T(n) =O(f(n))
       加法规则:T(n,m) = T1(n) + T2(n) = O (max ( f(n),g(m) )
       乘法规则:T(n,m) = T1(n) * T2(m) = O (f(n) * g(m))
       时间复杂度比较:在这里插入图片描述
       图形表示:
在这里插入图片描述


简单循环的快速判断(列表法)

       【第一题】
在这里插入图片描述
       输出
在这里插入图片描述
       结果
在这里插入图片描述

       虽然这种一眼就可以看出时间复杂度T(n)等于O(n),可是应该还有小伙伴不知道求解过程,下面我们来说一说步骤。
在这里插入图片描述
       ①当t循环0次(没有开始循环时),i=0的;当t循环第一次结束,i=1…所以很容易看出,t=i的关系。
       ②找边界的话,在循环结束条件可以看出,边界是i=n。
       ③联立两个方程,可解出时间复杂度为O(n)。


在这里插入图片描述
       输出
在这里插入图片描述
       结果
在这里插入图片描述
       解法:
在这里插入图片描述


在这里插入图片描述
       输出
在这里插入图片描述

       结果
在这里插入图片描述
       解法:
在这里插入图片描述


       【2014考研真题】
在这里插入图片描述

       输出
在这里插入图片描述
       结果
在这里插入图片描述

       这题是嵌套循环,观察可知,内外层循环相互独立,可分开求解。
在这里插入图片描述


       当然,并不是全部都是用于用列表法,有些程序用列表法反而更难求解,就如下面这道。
在这里插入图片描述
       这道题适合用类推,我们可以看出sum增加是有规律的。
       当i=1时,sum=0+1;当i=2时,sum=0+1+2…
       可以类推出sum=(0+1+2+3+...+i)=(1+i)*i/2,根据循环次数可知,(1+t)*t/2<n,所以时间复杂度为O(n的二分之一次方)。

       PS:先整理着这些例题,有时间再分享多种不同题型!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值