亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

算法(一)時間復雜度

2019-11-09 15:03:05
字體:
來源:轉載
供稿:網友

前言

算法很重要,但是一般情況下做移動開發并不經常用到,所以很多同學早就將算法打了個大禮包送還給了老師了,況且很多同學并沒有學習過算法。這個系列就讓對算法頭疼的同學能快速的掌握基本的算法。過年放假階段玩了會游戲NBA2K17的生涯模式,沒有比賽的日子也都是訓練,而且這些訓練都是自發的,沒有人逼你,從早上練到晚上,屬性也不漲,但是如果日積月累,不訓練和訓練的人的屬性值就會產生較大差距。這個突然讓我意識到了現實世界,要想成為一個球星(技術大牛)那就需要日積月累的刻意訓練,索性放下游戲,接著寫文章吧。

1.算法的效率

雖然計算機能快速的完成運算處理,但實際上,它也需要根據輸入數據的大小和算法效率來消耗一定的處理器資源。要想編寫出能高效運行的程序,我們就需要考慮到算法的效率。 算法的效率主要由以下兩個復雜度來評估: 時間復雜度:評估執行程序所需的時間??梢怨浪愠龀绦驅μ幚砥鞯氖褂贸潭?。 空間復雜度:評估執行程序所需的存儲空間??梢怨浪愠龀绦驅τ嬎銠C內存的使用程度。

設計算法時,一般是要先考慮系統環境,然后權衡時間復雜度和空間復雜度,選取一個平衡點。不過,時間復雜度要比空間復雜度更容易產生問題,因此算法研究的主要也是時間復雜度,不特別說明的情況下,復雜度就是指時間復雜度。

2.時間復雜度

時間頻度 一個算法執行所耗費的時間,從理論上是不能算出來的,必須上機運行測試才能知道。但我們不可能也沒有必要對每個算法都上機測試,只需知道哪個算法花費的時間多,哪個算法花費的時間少就可以了。并且一個算法花費的時間與算法中語句的執行次數成正比例,哪個算法中語句執行次數多,它花費時間就多。一個算法中的語句執行次數稱為語句頻度或時間頻度。記為T(n)。

時間復雜度 前面提到的時間頻度T(n)中,n稱為問題的規模,當n不斷變化時,時間頻度T(n)也會不斷變化。但有時我們想知道它變化時呈現什么規律,為此我們引入時間復雜度的概念。一般情況下,算法中基本操作重復執行的次數是問題規模n的某個函數,用T(n)表示,若有某個輔助函數f(n),使得當n趨近于無窮大時,T(n)/f(n)的極限值為不等于零的常數,則稱f(n)是T(n)的同數量級函數,記作T(n)=O(f(n)),它稱為算法的漸進時間復雜度,簡稱時間復雜度。

3.大O表示法

像前面用O( )來體現算法時間復雜度的記法,我們稱之為大O表示法。 算法復雜度可以從最理想情況、平均情況和最壞情況三個角度來評估,由于平均情況大多和最壞情況持平,而且評估最壞情況也可以避免后顧之憂,因此一般情況下,我們設計算法時都要直接估算最壞情況的復雜度。 大O表示法O(f(n)中的f(n)的值可以為1、n、logn、n2等,因此我們可以將O(1)、O(n)、O(logn)、O(n2)分別可以稱為常數階、線性階、對數階和平方階,那么如何推導出f(n)的值呢?我們接著來看推導大O階的方法。

推導大O階 推導大O階,我們可以按照如下的規則來進行推導,得到的結果就是大O表示法: 1.用常數1來取代運行時間中所有加法常數。 2.修改后的運行次數函數中,只保留最高階項 3.如果最高階項存在且不是1,則去除與這個項相乘的常數。

常數階 先舉了例子,如下所示。

int sum = 0,n = 100; //執行一次 sum = (1+n)*n/2; //執行一次 System.out.PRintln (sum); //執行一次

上面算法的運行的次數的函數為f(n)=3,根據推導大O階的規則1,我們需要將常數3改為1,則這個算法的時間復雜度為O(1)。如果sum = (1+n)*n/2這條語句再執行10遍,因為這與問題大小n的值并沒有關系,所以這個算法的時間復雜度仍舊是O(1),我們可以稱之為常數階。

線性階 線性階主要要分析循環結構的運行情況,如下所示。

for(int i=0;i<n;i++){//時間復雜度為O(1)的算法...}

上面算法循環體中的代碼執行了n次,因此時間復雜度為O(n)。

對數階 接著看如下代碼:

int number=1;while(number<n){number=number*2;//時間復雜度為O(1)的算法...}

可以看出上面的代碼,隨著number每次乘以2后,都會越來越接近n,當number不小于n時就會退出循環。假設循環的次數為X,則由2^x=n得出x=log?n,因此得出這個算法的時間復雜度為O(logn)。

平方階 下面的代碼是循環嵌套:

for(int i=0;i<n;i++){ for(int j=0;j<n;i++){ //復雜度為O(1)的算法 ... } }

內層循環的時間復雜度在講到線性階時就已經得知是O(n),現在經過外層循環n次,那么這段算法的時間復雜度則為O(n2)。 接下來我們來算一下下面算法的時間復雜度:

for(int i=0;i<n;i++){ for(int j=i;j<n;i++){ //復雜度為O(1)的算法 ... } }

需要注意的是內循環中int j=i,而不是int j=0。當i=0時,內循環執行了n次;i=1時內循環執行了n-1次,當i=n-1時執行了1次,我們可以推算出總的執行次數為:

n+(n-1)+(n-2)+(n-3)+……+1 =(n+1)+[(n-1)+2]+[(n-2)+3]+[(n-3)+4]+…… =(n+1)+(n+1)+(n+1)+(n+1)+…… =(n+1)n/2 =n(n+1)/2 =n2/2+n/2

根據此前講過的推導大O階的規則的第二條:只保留最高階,因此保留n2/2。根據第三條去掉和這個項的常數,則去掉1/2,最終這段代碼的時間復雜度為O(n2)。

其他常見復雜度

除了常數階、線性階、平方階、對數階,還有如下時間復雜度: f(n)=nlogn時,時間復雜度為O(nlogn),可以稱為nlogn階。 f(n)=n3時,時間復雜度為O(n3),可以稱為立方階。 f(n)=2?時,時間復雜度為O(2?),可以稱為指數階。 f(n)=n!時,時間復雜度為O(n!),可以稱為階乘階。 f(n)=(√n時,時間復雜度為O(√n),可以稱為平方根階。

4.復雜度的比較

下面將算法中常見的f(n)值根據幾種典型的數量級來列成一張表,根據這種表,我們來看看各種算法復雜度的差異。

n logn √n nlogn n2 2? n!
5 2 2 10 25 32 120
10 3 3 30 100 1024 3628800
50 5 7 250 2500 約10^15 約3.0*10^64
100 6 10 600 10000 約10^30 約9.3*10^157
1000 9 31 9000 1000 000 約10^300 約4.0*10^2567

從上表可以看出,O(n)、O(logn)、O(√n )、O(nlogn )隨著n的增加,復雜度提升不大,因此這些復雜度屬于效率高的算法,反觀O(2?)和O(n!)當n增加到50時,復雜度就突破十位數了,這種效率極差的復雜度最好不要出現在程序中,因此在動手編程時要評估所寫算法的最壞情況的復雜度。

下面給出一個更加直觀的圖: 這里寫圖片描述

其中x軸代表n值,y軸代表T(n)值(時間復雜度)。T(n)值隨著n的值的變化而變化,其中可以看出O(n!)和O(2?)隨著n值的增大,它們的T(n)值上升幅度非常大,而O(logn)、O(n)、O(nlogn)隨著n值的增大,T(n)值上升幅度則很小。 常用的時間復雜度按照耗費的時間從小到大依次是:

O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2?)<O(n!)

參考資料 《大話數據結構》 《挑戰程序設計競賽2》 《算法》


歡迎關注我的微信公眾號,第一時間獲得博客更新提醒,以及更多成體系的Android相關技術干貨。 掃一掃下方二維碼即可關注:

enter image description here


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人激情在线播放| 中文字幕亚洲精品| 久久久久久久久久久免费精品| 欧美日韩中文字幕综合视频| 91热精品视频| 日韩欧美在线观看视频| 欧美国产第一页| 日韩精品在线电影| 亚洲国产婷婷香蕉久久久久久| 91免费在线视频| 日本亚洲欧洲色| 亚洲午夜精品视频| 91av在线免费观看| 亚洲第一精品夜夜躁人人躁| 黄色精品在线看| 亚洲欧美日本伦理| 中文字幕亚洲在线| 国产日韩欧美黄色| 欧美精品久久久久久久久久| 精品一区二区三区四区在线| 亚洲免费伊人电影在线观看av| 全亚洲最色的网站在线观看| 在线观看久久久久久| 中文字幕久久亚洲| 欧美成人免费va影院高清| 成人激情视频网| 日韩**中文字幕毛片| 91香蕉国产在线观看| 国产精品最新在线观看| 国产成人精品久久亚洲高清不卡| 91精品国产91久久久久福利| 亚洲视频欧洲视频| 欧美在线视频免费观看| 亚洲一区999| 亚洲精品suv精品一区二区| 久久色免费在线视频| 欧美大胆a视频| 亚洲精品一区二区网址| 国产精品日韩电影| 最近免费中文字幕视频2019| 日韩av在线网页| 国内精品一区二区三区| 欧美丝袜美女中出在线| 91色p视频在线| 国产欧美精品日韩| 亲爱的老师9免费观看全集电视剧| 欧美大片va欧美在线播放| 精品久久久999| 国产成人激情小视频| 久久精品视频va| 日韩网站免费观看高清| 久久精品亚洲94久久精品| 91久久国产精品| 亚洲人成电影在线观看天堂色| 国产精品美女午夜av| 日韩男女性生活视频| 国产精品高潮呻吟久久av黑人| 亚洲综合日韩中文字幕v在线| 亚洲国产精品久久91精品| xvideos亚洲人网站| 性欧美xxxx| 国产一区二区三区久久精品| 久久久久久97| 九九热最新视频//这里只有精品| 91精品视频在线免费观看| 国产精品午夜一区二区欲梦| 动漫精品一区二区| 亚洲欧美国内爽妇网| 国产欧美日韩精品专区| 国产精品视频久久久| 成人a在线观看| 九色精品免费永久在线| 日韩大陆毛片av| 亚洲电影免费观看高清完整版在线观看| 尤物yw午夜国产精品视频明星| 国产日韩在线亚洲字幕中文| 国产成人亚洲综合| 中国china体内裑精亚洲片| 狠狠干狠狠久久| 欧美高清第一页| 日韩av手机在线观看| 久久久久久久久电影| 国产精品大陆在线观看| 国产亚洲欧洲高清| 日韩中文字幕在线观看| 亚洲精品网址在线观看| 成人亚洲欧美一区二区三区| 亚洲最大的免费| 中文字幕久久亚洲| 91亚洲国产精品| 亚洲欧美资源在线| 久久这里有精品| 欧美高清激情视频| 中文字幕一区电影| 成人网址在线观看| 欧美精品免费在线观看| 国产一区二区三区直播精品电影| 欧美电影免费观看网站| 欧美成人激情图片网| 日韩中文视频免费在线观看| 久久青草福利网站| 色哟哟网站入口亚洲精品| 97超碰蝌蚪网人人做人人爽| 国产男女猛烈无遮挡91| 一区二区国产精品视频| 成人精品福利视频| 国产精品www色诱视频| 亚洲爱爱爱爱爱| 欧美精品在线第一页| 亚洲毛片在线免费观看| 中文字幕av一区二区| 欧美日韩第一视频| 97精品视频在线| 欧美日韩另类在线| 日韩电影大片中文字幕| 国产精品网站视频| 亚洲第一综合天堂另类专| 91九色国产在线| 日韩欧美精品中文字幕| 欧美激情欧美激情在线五月| 中文字幕在线看视频国产欧美在线看完整| 久久精品视频va| 中文字幕视频一区二区在线有码| 伊人久久男人天堂| 亚洲欧美变态国产另类| 欧美视频在线观看免费网址| 97视频免费观看| 中文字幕久久精品| 精品国产乱码久久久久酒店| 国产91精品视频在线观看| 久久视频在线看| 欧洲成人午夜免费大片| 青青草国产精品一区二区| 亚洲夜晚福利在线观看| 日韩欧美国产黄色| 亚洲人成电影在线播放| 欧美性猛交xxxx偷拍洗澡| 国产精品久久在线观看| 国产精品你懂得| 久久久午夜视频| 亚洲一区二区三区xxx视频| 国产精品久久久久久超碰| 国产在线精品一区免费香蕉| 国产成人精品最新| 久久久精品一区二区三区| 日韩中文字幕视频在线观看| 91精品久久久久久久久中文字幕| 久久亚洲一区二区三区四区五区高| 国产精品久久久久久久久粉嫩av| 国产精品福利片| 亚洲精品国精品久久99热| 欧美成人中文字幕在线| 欧美电影在线免费观看网站| 久久久在线观看| 亚洲国产精品va在线看黑人| 最新69国产成人精品视频免费| 中文字幕亚洲欧美一区二区三区| 中文字幕日本精品| 欧美精品xxx| 久久久av电影| 精品久久久久久电影| 欧美日韩国产精品一区二区不卡中文| 亚洲欧美激情精品一区二区| 国产成人精品综合久久久|