数据结构和算法(01)--- 算法复杂度
文章目錄
- 算法時間復(fù)雜度
算法時間復(fù)雜度
要判斷算法的好壞,可以從時間方面進行分析。算法運行的越快,所用的時間越短則算法越好。但是同一個算法在不同的平臺上的運行時間不同。那么又該如何進行評判呢?我們采用時間復(fù)雜度進行衡量。
1.算法時間復(fù)雜度定義
??在進行算法分析時, 語句總的執(zhí)行次數(shù)T(n)T(n)是關(guān)于問題規(guī)模nn的函數(shù),進而分析T(n)T(n)隨nn的變化情況并確定T(n)T(n)的數(shù)量。算法的時間復(fù)雜度。也就是算法的時間量度,記做:T(n)=O(f(n))T(n)=O(f(n))。它表示隨問題規(guī)模nn的增大,算法執(zhí)行時間的增長率和f(n)f(n)的增長率相同,稱作算法的漸近時間復(fù)雜度,簡稱為時間復(fù)雜度。 其中f(n)f(n)是問題規(guī)模nn的某個函數(shù)。
個人理解:由于不同的機器指令執(zhí)行的速度不一樣,而我們的代碼又常常是跑在多臺不同機器上的,為了找出與機器無關(guān)但又可以說明代碼效率的量標,于是就選擇時間復(fù)雜度只與代碼的執(zhí)行次數(shù)有關(guān),即:T(N)。一般情況下,隨著N不斷增大,T(N)增長緩慢的算法時間復(fù)雜度越低,算法越好。
2.如何分析一個算法的時間復(fù)雜度:
- 順序結(jié)構(gòu),時間復(fù)雜度等于每步相加;選擇分支結(jié)構(gòu),時間復(fù)雜度等于最大時間復(fù)雜度的那個分支;循環(huán)結(jié)構(gòu),時間復(fù)雜度每個循環(huán)體相乘
- 用常數(shù)1取代運行時間中的所有加法常數(shù);只保留階數(shù)最高的那一項;高階項前面的系數(shù)可以直接用1替代。
時間復(fù)雜度為O(1)
int a = 1 , b = 3 , sum = 0; //執(zhí)行1次 sum = a + b; //執(zhí)行1次 cout<<"the sum is :"<<sum<<endl; //執(zhí)行1次 // 1+1+1 = 3 --> O(1)時間復(fù)雜度為O(N)
//執(zhí)行N次 for(i=0;i<=n;i++){printf("the data is %d\n",i) } // N * 1 = N ---> O(N)時間復(fù)雜度為O(N^2)
//執(zhí)行N次 for(j=0;j<=n;j++){ //執(zhí)行N次for(i=0;i<=n;i++){ //執(zhí)行N次printf("the data is %d\n",i) } } //N * N = N^2 -----> O(N^2)時間復(fù)雜度為O(logN)
//執(zhí)行N/2次 while(i<n){count<<"the data is :<<i<<endl;i = i*2; }常用的時間復(fù)雜度所耗費的時間從小到大依次是:
O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
3.最壞情況:
- 最壞情況運行時間是一種保證,那就是運行時間將不會再壞了。一般在沒有特殊說明的情況下,都是指最壞時間復(fù)雜度。
4.平均情況
- 平均運行時間是所有情況中最有意義的,因為它是期望的運行時間。
5.遞歸算法的時間復(fù)雜度的計算
- 在算法的分析中,當一個算法中包含遞歸調(diào)用時,其時間復(fù)雜度的分析會轉(zhuǎn)化成為一個遞歸方程的求解。而對遞歸方程的求解,方法多種多樣,目前主流的方法:代入法,迭代法,公式法,母函數(shù)法,差分方程法。
總結(jié)
以上是生活随笔為你收集整理的数据结构和算法(01)--- 算法复杂度的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Python Cookbook 3rd
- 下一篇: 《剑指Offer》38:字符串的排列