日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

渐进时间复杂度

發布時間:2023/12/14 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 渐进时间复杂度 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

時間復雜度

1.概念

? ? ?漸進時間復雜度(時間復雜度)是算法效率的度量。在一般情況下,算法基本操作重復執行的次數用T(n)表示。同時用一個輔助函數f(n),T(n)/f(n)!=0,那么f(n)是T(n)的同數量級函數,T(n)=O(f(n)),這就稱為漸進時間復雜度。


2.大(O)表示法

? ? ?T(n)=O(f(n))稱為大(O)表示法。算法的復雜度可以從最優、最壞、平均三個角度來評估,一般以最壞角度來進行時間復雜度的評估。大(O)表示法的時間復雜度的函數階一般有以下幾種情況,分別是O(1),O(n),O(nx),O(log2n),O(nlog2n)等等。并且如果函數階里同時出現多種函數組合,則以階數最大的函數作為時間復雜度。并且如果函數系數非1,則化為1。


3.時間復雜度實例

3.1 常數階?

int sum=0,n=10;//執行1次 sum+=n*(n+1);//執行1次 sum++;//執行1次 cout<<sum;//執行1次

? ? ? ?此段代碼執行4次,執行次數與n并無關系,所以根據大(O)表示法推導,我們應該將4改為1,即結果都應該為O(1)。

3.2 線性階

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

? ? ? ? 此段代碼是單層循環,運行了n次,所以時間負責度是O(n)。

3.3 對數階

int num=1; while(num<n){num*=2; }

? ? ? ? num初始值為1,不斷自乘2逼近n,設循環次數為x,由數學公式2x=n,x=log2n次。

3.4 平方階

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

? ? ? ?由上述線性階的時間復雜度說明容易得知在外層循環中,時間復雜度為O(n),再經過內層循環,兩個O(n*n)的結果為O(n2),冪次階同理。

3.4 階乘階

int fac(int n){cout<<n*fac(n-1); }

? ? ? ? 以上代碼是一個階乘函數,顧名思義,為O(n!)。

4.復雜度圖表比較


n

l? ogn
nlogn
n2
2?
n!
5
2102532120
103301001024
5052502500約10^15


約3.0*10^64

100660010000約10^30

約9.3*10^157
1000990001000 000約1

約4.0*10^2567





常用的時間復雜度按照耗費的時間從小到大依次是:O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2?)<O(n!)

參考來源:

1.數據結構

2.大話數據結構

約3.0*10^64

總結

以上是生活随笔為你收集整理的渐进时间复杂度的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。