关于时间复杂度之认识

       最近期中考,人家是在复习,而我则是在预习,真惭愧~~

    关于时间复杂度的问题纠结了很久很久,也是半懂不懂的,然后打算写篇博客来记录一下自己看书后的收获,也在这里记录一下关于时间复杂度的认识,说的不好或是不对的地方,请原谅。

    一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。

    一般情况下,算法中的基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时间度量记作

                                                T(n)=O(f(n))

它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度

很简单的一个例子:

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]+=a[i][k]*b[k][j];
}

    上面的这个例子是“矩阵相乘问题”的基本操作。整个算法的执行时间与该操作重复执行的次数n3成正比,所以时间复杂度为T(n)=O(n3);在这里我粗略的把计算机1秒运行的次数看作108(具体的怎么说我也不知道,水平太辣鸡)。比如题目规定的时间为1秒,当n=1000时,时间复杂度为10,和计算机1秒运行次数进行比较得出时间超限……。

    算法还可能呈现的时间复杂度有对数阶O(log n)(例如:二分查找,还有分治乘方运算也是也是对数阶)、指数阶O(2n)等。一般情况下,对于问题(或一类算法)只需要一种基本操作来讨论算法的时间复杂度即可,当然有时也需要同时考虑几种基本的操作,甚至可以对不同的操作赋予不用的权值,以反映不同操作所需要的相对时间,这种做法便于综合比较解决同一问题的两种完全不同的算法。

点击打开时间复杂度








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值