時間復雜度T(n)


1:概念

T(n)被稱為時間復雜度,一般為在某個算法中操作步驟的重復次數與問題規模n的關系,下面一一舉例說明

2:具體說明

2.1:常數階o(1)

無論代碼有多少行,只要沒有循環等復雜的結構,其算法時間復雜度就是1為常數,如

int i =1;
in j = 0;
i++;
j--;
//該代碼沒有循環,且不論i和j的值有多大,其操作語句的重復次數都是固定的!

2.2:對數階O(log2n)

示例代碼

int n=100;
int i =1
while(i<n){
    i = 2*i;
}//該循環的次數與n有着很大的關系,每次循環i都乘以2。

分析可知,循環次數x與n有很大的關系,假如循環了x次后,推出了循環,則有2^x = n則,重復次數x = log(2n),此為對數階的分析。

2.3:線性階O(n)

示例代碼

int n =x;
for(int i =0;i<n;i++){        
}//該算法的是線性階,算法的重復次數等於變量n,即n多少就要重復多少次

O(n)該循環的重復次數與變量n息息相關!即為n

 

2.4:線性對數階O(nlogn)

從名字上可以分析,假設一個算法是對數階的即O(logn),則將其根據n來循環n遍,則得到的算法的操作重復次數為nlogn,即O(nlogn)

示例代碼如下:

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

內部while循環,的時間復雜度為O(log2n),而外部的為n,則總的操作重復次數為O(nlog2n),即線性對數階

2.5:平方階O(n^2)

依然分析該時間復雜度,我們已經直到O(n)對應的算法是循環n次的,而O(n^2)則只需要n次循環里面再套用n次循環的情況即可。

代碼實例。

int n ;
for(int i=0;i<n;i++){
    for(int j=0;j<n;j++){
  
  }
}

很好理解咯,當然立方階也可以以此類推!

2.6:指數階O(2^n)

指數階是最恐怖的,當n較小時帶來的時間復雜度還可以接受,但是一旦當n大於10時帶來的指數變化的重復操作將是致命的!所以運用中要極力避免使用指數階的算法。

代碼實例

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM