数据结构时间复杂度

发布时间 2023-12-17 12:59:14作者: 艾鑫4646

复杂度分为时间复杂度空间复杂度

时间复杂度

概念:

若存在函数f(n)

记作T(n)=O(f(n)) .称O(f(n)) 为时间复杂度。

T(n)为常熟操作执行次数

简单理解,时间复杂度就是把T(n)简化为一个数量级,这个数量级可能为n,n^2``````

 

1.常数阶

这种与问题规模的大小无关(n的多少),执行时间恒定的算法,O(1)时间复杂度,又叫常数阶。

 

int sum=0 ,n=100;/*执行1次*/
sum=(1+n)*n/2; /*执行一次*/
printf("%d",sum)/*执行一次*/

 

2.线性阶

要确定某个算法的阶次,我们需要确定某个特定语句运行的次数。

因此,我们要分析算法的复杂度,关键就是分析循环结构的某个特定语句运行情况

 它的循环的时间复杂度为O(n),因为循环体中的代码需要执行n次

forint i=0;i<n;i++){
int sum=0;/*时间复杂度为O(1)的程序步骤序列*/
}

 

3.对数阶

为此count*2之后,就距离n更近了一分。也就是说,有多少个2相乘后大于n,则会退出循环。

由2^x=n 得到x=log2(n),所以这个循环的时间复杂度为O(log2(n)),可以写为O(logN)

int count=1;
while(count<n){
count=count*2;
/*时间复杂度为O(1)的程序步骤序列*/
}

 

4.平方阶

这段代码的时间复杂度为O(n^2)

int i,j;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
/*时间复杂度为O(1)的程序步骤序列*/
}
}

 

 

推到时间复杂度的方法:

1.当运行时间只有常数时,则用1来代替。

 上面执行了4次但是用O(1)表示。

2.在得到的运行次数函数中,只保留最高阶,且除去最高阶项中相乘的常数。

 3.常见的时间复杂度