时间复杂度
时间复杂性:是指算法中各语句执行时间的总和。
(我不会在这里面打出一个数值的次方还有其他的数学符号,在此我就通俗的表示)
通过一个例子来看吧
示例:
for(int i=1;i<=n;++i){ //①
for(int j=1;j<=n;++j){ //②
x=x+1; //③
}
}
就拿这个简单的双层for循环来看。
时间复杂度并没办法精确的得到,只能了解它的大概趋势。在此,假设每一行代码的执行所需时间都
是相同的,那么在整个程序中,执行了多少行代码,就花费了多少的时间。(可以通俗的这样子理解)
首先我们来计算语句中执行次数的总和是多少:
①行,一共执行了n+1次,其中前n次都是满足条件,执行了循环中的语句块的,第n+1次的时候,依旧执
行了一遍第①行的代码,执行完之后才发现不满足条件,才结束循环的。所以执行了n+1次。
②行,一共执行了n(n+1)次,先前说到,外层循环的n+1次中只有n次满足条件,执行了里面的语句
块,内层循环如外层循环一样,执行次数都是n+1次,但是外层循环一次,内层循环执行一遍,所以内层循
环执行了n(n+1)次;
③行,执行了n的2次方次,两个循环都只有n次满足条件,才可以进入循环体,执行循环体内的代码。这
一行代码就是循环体内的代码。所以是这个执行次数。
语句总执行次数:f(n)=2nn+2*n+1
前面说到,时间复杂度是一种趋势,并不是一个精确值,所以,我们只需要取这个式子中的最高次方的单项
式即可,也就是2nn;因为式子中的最高次对整个的函数趋势的影响最大,取f(n)=2nn。
时间复杂度的数量级