演算法優劣的評定標準 時間複雜度

2021-06-18 14:54:09 字數 1059 閱讀 1473

同一問題可用不同演算法解決(比如同是建立乙個有向圖creategraph(g,v),選擇鄰接矩陣時間複雜度是o(n*n+n+e),而鄰接表是o(n+e))

,而乙個演算法的質量優劣將影響到演算法乃至程式的效率。演算法分析的目的在於選擇合適演算法和改進演算法。乙個演算法的評價主要從時間複雜度和空間複雜度來考慮。 

1、時間複雜度

(1)時間頻度

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

(2)時間複雜度

在剛才提到的時間頻度中,n稱為問題的規模,當n不斷變化時,時間頻度t(n)也會不斷變化。但有時我們想知道它變化時呈現什麼規律。為此,我們引入時間複雜度概念。

一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t(n)表示,若有某個輔助函式f(n),使得當n趨近於無窮大時,t(n)/f(n)的極限值為不等於零的常數,則稱f(n)是t(n)的同數量級函式。記作t(n)=o(f(n)),稱o(f(n)) 為演算法的漸進時間複雜度,簡稱時間複雜度。

在各種不同演算法中,若演算法中語句執行次數為乙個常數,則時間複雜度為o(1),另外,在時間頻度不相同時,時間複雜度有可能相同,如t(n)=n2+3n+4與t(n)=4n2+2n+1它們的頻度不同,但時間複雜度相同,都為o(n2)。

按數量級遞增排列,常見的時間複雜度有:

常數階o(1),對數階o(log2n),線性階o(n),

線性對數階o(nlog2n),平方階o(n2),立方階o(n3),...,

k次方階o(nk),指數階o(2n)。隨著問題規模n的不斷增大,上述時間複雜度不斷增大,演算法的執行效率越低。

2、空間複雜度 

與時間複雜度類似,空間複雜度是指演算法在計算機內執行時所需儲存空間的度量。記作:

s(n)=o(f(n))

我們一般所討論的是除正常占用記憶體開銷外的輔助儲存單元規模。討論方法與時間複雜度類似,不再贅述。

C 語言的標準時間封裝

c語言處理時間有很多函式和結構體型別完成,並且涉及到時間戳,標準時間,本地時間的轉換。學習起來感覺頭大,外加上小寫並且簡寫函式名稱,就難以理解。中解釋 include include include include typedef time t timestamp 舊的時間戳型別 給他其個新名字 t...

時間戳與標準時間的相互轉化

1.時間戳轉化為標準時間 unix時間戳 unix timestamp 或稱unix時間 unix time posix時間 posix time 是一種時間表示方式,定義為從格林威治時間1970年01月01日00時00分00秒 北京時間1970年01月01日08時00分00秒 起至現在的總秒數。但...

crontab設定同步標準時間無效的解決方法

問題描述 crontab e設定每分鐘同步標準時間後,雖然在伺服器日誌 var log messages顯示ntpdate us.pool.ntp.org hwclock w,過段時間後又出現了延遲,與其他伺服器時間不一致,導致資料庫日誌那塊客戶提交時間大於傳送運營商時間。問題分析 crontab設...