目录
1:什么是时间复杂度和空间复杂度
2:时间复杂度与空间复杂度求法
3:几个典型时间复杂度与空间复杂度的分析
1:什么是时间复杂度与空间复杂度
首先对于我们所写的程序来说,为了评估一个算法的好与坏我们需要通过该程序的时间与空间的复杂度来比较,这里的比较是在程序正确的情况下来比较的,时间复杂度:简而言之就是这个算法所运行时需要多少时间,我们采用的是渐进时间复杂度,时间复杂度越低,则在相对情况下该程序好。记作:T(n) = O(f(n)).
空间复杂度: 空间复杂度 =算法本身所需要的空间+算法的辅助空间
算法本身所需要的空间为:变量,指令等所需要的空间,而复杂空间则是我们在实现算法的过程中所创建的空间。
算法的时间复杂度与空间复杂度有时候是矛盾的,即有时间我们需要牺牲空间来换取时间,有时候需要牺牲时间来换取空间。
总而言之,算法的好坏需要通过时间复杂度与空间复杂度来评判。
2:时间复杂度与空间复杂度的求法
我们执行语句的时间 =执行次数
时间复杂度: 先找程序中执行次数最多的语句 --->算出该语句执行了多少次 --->取出该语句执行次数的最高数量级且忽略前面的系数---->写出该程序的时间复杂度T(n) =O(f(n)).
f(n) :即该语句的最高数量级,T(n)为该程序的时间复杂度.
一般我们尽量选左边的作为程序的时间复杂度
空间复杂度
看我们所使用的变量与循环有没有关系,如果没有关系我们则称它的空间复杂度为S(n) =O(1),即原地工作。
3:典型列题的时间复杂度的分析
int i =1;
while(i<=n)
i=i*2;
//这里我们分析,当循环执行1次 i=2^1 ;
2次 i=2^2
3次 i =2^3;
x次 i =2^x
所以我们就有2^x<=n
x<lgn
所以时间复杂度为T(n) = O(lgn)
int x =1;
int i =1;
int j =1;
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
{x++;}
//这里我们先找到执行最多的语句为x++;
其次它的时间复杂度的算法为:可以用无穷级数的方法
先算j从1到i,则有i次,再算i从1到n则有 n(n+1)/2,又由时间复杂度的求法可在,次程序的时间复杂度为
T(n)= O(n^2)