时间复杂度的简单介绍

时间复杂度是什么

      时间复杂度是用来衡量运行时间随输入规模的增长而增长的趋势,简单来说,随着输入样本的增多,电脑需要执行的指令数量越多。时间复杂度就是来描述这样一种趋势的量。

时间复杂度的表示方法

      时间复杂度是一种趋势,可以类比理解为微积分里面的极限。它有多种类型。常见的有常数阶O(n),对数阶O(log n),线性对数阶O(nlog n),平方阶O(n²),立方阶O(n的三次方)等等。

时间复杂度的作用

      前面已经提及,时间复杂度是一种描述时间增长的趋势的量。也就是说,如果我们知道了一个算法的时间复杂度,并且知道了它的输入,去除其他的因数(我们可不能肯定一台电脑只会运行一个程序,现在我们假设我们的电脑上没有其他的程序在运行),我们就能得到电脑需要执行指令的条数,结合每秒钟电脑的运算速度,我们就能估算程序运行的时间。

具体案例

    上面的内容听起来有点复杂,现在我们给个例子。

     要计算运行时间,就得知道几个量,他们分别是:指令的条数,电脑每秒钟执行指令的条数。指令的条数由时间复杂度和输入决定。

     时间复杂度是由算法决定的,具体情况要解读代码,现在我们给到这样一段代码

int m=0,i,j;
	for (i=1;i<=n;i++){
		for (j=1;j<=2*i;j++){
			m++;
		}
	} 

     其中,n是可以被用户定义的变量,我们假设读者对时间复杂度的求法了然于胸,一眼看出其时间复杂度是O(n²)。

      接下来,我们需要知道输入,也就是圆括号里面的n,假设我们把它定义为100000,也就是十万。从而 知道电脑需要执行的指令条数为十万的平方,也就是10的10次方。

       最后,要大致计算程序运行的时间,我们需要知道电脑每秒钟计算的次数。但是这显然超出了笔者的认知。但是,我们可以通过运行该次程序,得到了每秒钟执行指令的条数这个常数。

      在这个程序中,10的10次方条指令,电脑运行了3.96秒,约4秒,由此我们可以得到电脑每秒钟运算的次数为10的10次方除以4。

      这个结果是否正确呢,我们可以验证。输入10的5次方,时间复杂度为O(n²),共执行10的10次方条指令。如果我们输入20的5次方,也就是200000,按照逻辑,运行时间应该是前一次实验(3.96)秒的4倍左右。

       再拿一个例子来验证一下。   

 

     值得对这个例子进行说明的是,对于输入n,如果我输的是400000(别忘了他的数据类型对应的范围),理论上时间应该为输入100000的16倍,也就是64分钟,实际我的电脑为60秒左右。其次在程序运行的时候,我电脑风扇微微开始扇动,看来这么多次指令亦需要强大的电脑支撑啊。

总结       

       我们可以直观的看到,确实大致符合这样的结果。对于时间上的差别,我们当然可以理解:某些程序正在偷偷吃掉一部分运行,音乐软件可能正在挂着后台播放音乐,QQ有收到了朋友的新消息,这些都在占用电脑的CPU,从而影响电脑的运行速度。

      行文至此,下一篇介绍时间复杂度的计算方法。再会。

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值