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時帶來的指數變化的重復操作將是致命的!所以運用中要極力避免使用指數階的算法。
代碼實例