
文章插圖
正式工作也有3年的時間了,想要寫出更加優(yōu)雅的代碼 。
所以最近在刷leetcode補充數(shù)據(jù)結(jié)構(gòu)和算法方面的知識 。
學校里雖然學過,但是僅僅是有個大概的認識 。只有實際工作過幾年以后,才會明白數(shù)據(jù)結(jié)構(gòu)和算法的重要性 。
如果是通信專業(yè)出身的同學,或者是硬件出身的同學一定知道:對于一個信號,我們可以從時域和頻域兩個方面去分析 。
那么計算機科學或者說軟件開發(fā)中的算法怎么去分析呢? 有兩個衡量優(yōu)劣的維度:時間復雜度和空間復雜度 。
時間復雜度:執(zhí)行當前算法所消耗的’時間’ ??臻g復雜度:執(zhí)行當前算法所占用的內(nèi)存 。在這邊博文中,我們來好好分析一下時間復雜度 。
時間復雜度真的是計算’時間’嗎?時間復雜度公式:大O符號表示法常見時間復雜度類型及代碼分析常數(shù)型O(1)對數(shù)型O(log n)線性型O(n)線性對數(shù)型O(n log n)平方型O(n^2)、立方型O(n^3)、K次方型O(n^k)平方底指數(shù)型O(2^n)、立方底指數(shù)型O(3^n)、K次底指數(shù)型O(k^n)階乘型O(n!)如何理解斐波那契數(shù)列的時間復雜度O(2^N)?如何理解階乘型時間復雜度O(n!)?參考資料時間復雜度真的是計算’時間’嗎?把算法的執(zhí)行時間當做時間復雜度?
這種方式是最為直觀也是最容易想到的方式 。
但是有一個問題,那就是代碼在不同性能的機器上運行,以及在不同的狀態(tài)下運行,會呈現(xiàn)出完全不同的運行時間 。比如說我有一臺內(nèi)存為32GB內(nèi)存的mbp,還有一臺8GB的臺式機,假設其它的硬件條件比如cpu,主板以及機器負載狀態(tài)一致 。通常情況下,32GB的內(nèi)存要比8GB的內(nèi)存運行更快 。而且這種理想狀態(tài)下的只有單一變量的狀態(tài)也是很難做到的 。
所以不能通過計算算法的消耗時間作為時間復雜度 。
那我們通常所說的’時間’復雜度中的’時間’到底是指什么呢?
聰明的前輩們想到了一種方式:大O表示法 。
大O表示法內(nèi)部有非常復雜的數(shù)學計算邏輯,我們偷個懶,不去證明公式,把公式用好就很厲害了 。
為什么不去證明一下或者演算一遍? 我在大一曾經(jīng)上過一門叫做高等代數(shù)的課,有道題目叫做:請證明1+1=2 。
看到這個題目應該知道為什么不深究大O表示法背后的數(shù)學了吧 。
時間復雜度公式:大O符號表示法T(n) = O(f(n))f(n)是指每行代碼執(zhí)行次數(shù)之和f(n)可以是這些值:1,log n,n,nlog n,n^2,n^3,n^k,2^n,n!f(n)與O正相關O(f(n))可以是這些值:O(1),O(log n),O(n),O(nlog n),O(n^2),O(n^3),O(n^k),O(2^n),O(n!)大O表示法實際表示的是代碼執(zhí)行時間的增長變化趨勢,不是真實的運行時間,是一種趨勢預估大O表示法中的f(n)是近似值 。很多時候不會完全是1,log n,n,nlog n,n^2,n^3,n^k,2^n,n!這些完整的值 。例如斐波那契數(shù)列的真實時間復雜度為O(2^N-1),由于N->∞,所以可以近似為O(2^N) 。更多的斐波那契數(shù)列時間復雜度的分析可以查看下文中的:如何理解斐波那契數(shù)列的時間復雜度O(2^N)?
常見時間復雜度類型及代碼分析理論扯了一大堆了,到精彩絕倫的Show me the code環(huán)節(jié)了 。先來看一張大O復雜度曲線圖 。
以下時間復雜度根據(jù)最佳->較好->一般->較差->糟糕的順序排列 。
常數(shù)型O(1)對數(shù)型O(log n)線性型O(n)線性對數(shù)型O(n log n)平方型O(n^2)、立方型O(n^3)、K次方型O(n^k)平方底指數(shù)型O(2^n)、立方底指數(shù)型O(3^n)、K次底指數(shù)型O(k^n)階乘型O(n!)常數(shù)型O(1)常見于賦值和引用等簡單操作算法消耗不隨變量增長而增長,性能最佳無論代碼執(zhí)行多少行,即使有幾千幾萬行,時間復雜度都為O(1)實際開發(fā)過程中,一次遞歸的時間復雜度也為O(1) 。因為O(1^n)無論n為多少都為O(1)let i = 0;let j = 9;i++;j--;let k = i + j;代碼分析: i為1,j為10,k為11 。時間復雜度為O(1) 。
以上關于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關的問題,請您及時就醫(yī)或請專業(yè)人士給予相關指導!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- 獅子座本周運勢綜合解析 獅子座今日運勢
- 解析氣對人體的幾大作用
- 螞蟻莊園金鑾殿是故宮的哪個宮殿 1月7日答案解析
- 中醫(yī)解析氣功減肥原理
- 免備案服務器推薦 免費備案域名解析
- 網(wǎng)站域名解析ip方法 網(wǎng)站dns查詢方式
- 解析太極拳實戰(zhàn)經(jīng)驗
- ip域名解析查詢 代理域名備案服務
- 各類游泳動作的要點解析
- 國內(nèi)DNS測速網(wǎng)站推薦 dns測速在線解析
