一个算法的时间复杂度为
计算之魂学习算法的第一课,老师要教的肯定是如何分析一个算法的时间复杂度。但对于初学者来说,很有可能会对这个概念的理解产生偏差,因为初学者会从时间出发来理解,例如实现同样功能的算法,如果一个耗时100毫秒,另一个耗时200毫秒,那么会认为第一个算法在时间复杂度上一定优于第二个,但也许这两个算法的时间复杂度是一样的,那么要如何评判算法的时间复杂度,我们还是要先从数学上进行探讨。

初学编程者需要培养这种对数字的感觉。例如问到int32与int64所容纳的数量,它们之间的比例应该是什么样的?初学者脑子里也许会出现芝麻和西瓜的对比。但实际上芝麻和地球来对比才更准确一些。建立了数量级增长的理解之后,再来看第二个问题,那就是计算机被发明出来是要解决什么类型的问题?计算机的特点是运算逻辑简单,但是速度超快。

算法的时间复杂度是指执行算法所需要的计算工作量。算法的时间复杂度不等于算法程序执行的具体时间。算法程序执行的具体时间受到所使用的计算机、程序设计语言以及算法实现过程中的许多细节的影响。而算法的时间复杂度与这些因素无关。算法的计算工作量是用算法所执行的基本运算次数来度量的。算法所执行的基本运算次数与问题的规模有关。在具体分析一个算法的工作量时,在同一问题规模下,算法所执行的基本运算次数还可能与特定的输入有关。

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

求解算法的时间复杂度的具体步骤是:1、找出算法中的基本语句:算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。2、计算基本语句的执行次数的数量级:(1)只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂和最高次幂的系数。(2)这样能够简化算法分析,并且使注意力集中在最重要的一点上:增长率。
(2)如果算法中包含嵌套的循环,则基本语句通常是最内层的循环体,如果算法中包含并列的循环,则将并列循环的时间复杂度相加。例如:for(i1;i