推導大o階:
1、用常數1取代執行時間中所有的加法常數;
2、在修改後的執行次數函式中,只保留最高端;
3、如果最高項存在且不是1,則去掉與這個項相乘的常數;得到的結果就是大o階。
常數階
線性階如單層for迴圈
對數階如
while (count如雙層for迴圈
// 下面的巢狀迴圈,時間複雜度是多少呢?
int i,j;
for (i=0; i
n + (n-1) + (n-2) + ... + 1 = n(n+1)/2 = n^2/2 + n/2
用我們推導大o階的方法,第一條,沒有加法常數不予考慮;第二條,只保留最高端,因此保留n^2/2;第三條,去除這個項相乘的乘數,也就是出去1/2,最終這段**的時間複雜度為o(n^2)。
常見時間複雜度:
o(1) < o(logn) < o(n) < o(n^2) < o(n^3) < o(2^n) < o(n!) < o(n^n)
最壞情況與平均情況:
最壞情況執行時間是一種保證,那就是執行時間將不會再壞了。在應用中,這是一種最重要的需求,通常,除非特別指定,我們提到的執行時間都是最壞情況的執行時間。
平均執行時間是所有情況中最有意義的,因為它是期望的執行時間。 現實中,平均執行時間很難通過分析得到,一般都是通過執行一定數量的實驗資料後估算出來的。
一般在沒有特殊說明的情況下,都是指最壞時間複雜度。
一般情況下,乙個程式在機器上執行時,除了需要儲存程式本身的指令、常數、變數和輸入資料外,還需要儲存對資料操作的儲存單元。若輸入資料所占用空間只取決於問題本身,和演算法無關,這樣只要分析該演算法在實現時所需的輔助單元即可。若演算法執行時間所需的輔助空間相對於輸入資料量而言是個常數,則稱此演算法為原地工作,空間複雜度為o(1)。
當不用限定詞地使用「複雜度」時,通常都是指時間複雜度。
大話資料結構閱讀筆記 一 時間複雜度和空間
先來明確2個名詞的概念 時間複雜度 書上對於時間複雜度的定義是這樣的 在進行演算法分析時,語句總的執行次數t n 是關於問題規模n的函式,進而分析t n 隨n的變化情況進而確定t n 的數量級。演算法的時間複雜度,也就是演算法的時間量度,記作t n o f n 它表示隨問題規模n的增大,演算法執行時...
4 經濟之旅之一 時間至上
特此宣告,本章的設立,純粹為了愛惜生命與金錢的人們。如果不清楚自己想幹嘛,能幹嘛,以及想瞧瞧別人在幹嘛的兄弟姐弟們,那就在先在這條路上碰碰運氣吧。噢,出發之前,不要忘了三寶 1 裝備。經濟之路,帶上腦袋就行,不用別的了。2 目的地。既然是經濟之旅,那麼我們就優先選個大眾化的路線。目的地,設暫定為 訪...
mysql資料庫時間操作 一 時間函式
一 格式轉化 二 時間取值 dayofmonth date 返回date是一月中的第幾日 在1到31範圍內 dayofyear date 返回date是一年中的第幾日 在1到366範圍內 month date 返回date中的月份數值 dayname date 返回date是星期幾 按英文名返回 m...