《大话数据结构》读后总结(六)
生活随笔
收集整理的這篇文章主要介紹了
《大话数据结构》读后总结(六)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2019獨角獸企業重金招聘Python工程師標準>>>
算法時間復雜度定義
算法的時間復雜度,也就是算法的時間量度,記作:T(n)=O(f(n))。它表示隨問題規模n的增大,算法執行時間的增長率和f(n)的增長率相同,稱作算法的漸近時間復雜度,簡稱為時間復雜度。其中f(n)是問題規模n的某個函數。
一般情況下,隨著n的增大,T(n)增長最慢的算法為最優算法。
O(1)叫常數階、O(n)叫線性階、O(n^2)叫平方階。
推導大O階:
1.用常數1取代運行時間中的所有加法常數。
2.在修改后的運行次數函數中,只保留最高階項。
3.如果最高階項存在且不是1,則去除與這個項相乘的常數。
常數階
int sum = 0,n = 100; /* 執行一次 */ sum = (1 + n) * n / 2; /* 執行一次 */ printf("%d", sum); /* 執行一次 */運行次數函數是f(n)=3,時間復雜度為O(1)。與問題的大小無關(n的多少),執行時間恒定的算法,叫常數階。
線性階
int i; for (i = 0; i < n; i++) {/* 時間復雜度為O(1)的程序步驟序列 */ }時間復雜度為O(n),因為循環體中的代碼須要執行n次。
對數階
int count = 1; while (count < n) {count = count * 2;/* 時間復雜度為O(1)的程序步驟序列 */ }由2x=n得到x=log2n,時間復雜度為O(logn)。
平方階
int i, j; for (i = 0; i < n; i++) {for (j = 0; j < n; j++){/* 時間復雜度為O(1)的程序步驟序列 */} }外層的循環時間復雜度O(n),內層時間復雜度為O(n),所以這段代碼的時間復雜度為O(n^2)。
n++; /* 執行次數為1 */ function(n); /* 執行次數為n */ int i, j; for (i = 0; i < n; i++) /* 執行次數為n^2 */ {function (i); } for (i = 0; i < n; i++) /* 執行次數為n(n + 1)/2 */ {for (j = i; j < n; j++){/* 時間復雜度為O(1)的程序步驟序列 */} }執行次數f(n)=1+n+n^2+n(n+1)/2=3/2·n^2+3/2·n+1,時間復雜度也是O(n2)。
歡迎掃描下方二維碼,持續關注:
互聯網工程師(id:phpstcn),我們一起學習,一起進步
轉載于:https://my.oschina.net/xushuhui/blog/3040214
總結
以上是生活随笔為你收集整理的《大话数据结构》读后总结(六)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL server 存储过程的建立和调
- 下一篇: 缓存中常见的概念及解决方案