MIT算法導論一 簡介

本系列文章根據MIT公開課程:算法導論,并結合《算法導論》進行整理。

Analysis of algorithm 算法分析

關于計算機程序在效率資源利用方面的理論研究

首先提出幾個問題?

  • 有比效率更重要的嗎?
    其實有很多,例如:正確性、可維護性、時間成本、健壯性、用戶友好(user-friendly)等等

  • 既然如此,為什么還要進行算法的效率分析呢?
    一個很有意思的比方,你認為錢重要還是水和飯重要?當然是水和飯,但是錢卻可以換來水和飯。在算法分析中的“效率”,就是用來支持其他東西的基礎,比如用戶體驗、安全等等。


這里舉個例子:排序問題
Input:一些列的數字集合 seq<a1, a2, a3... an>
Output:重新排序的數字集合seq<a1', a2', a3'... an'>,并且a1'<a2'<a3'...<an'

插入排序實現(偽代碼):

insertion sort(A[1...n])
  for j <- 2 to n
    do key <- A[j]
      i <- j-1
      while i>0 and A[i]>key
        do A[i+1] <- A[i]
          i <- i-1
      A[i+1] <- key

對于每一個A[i],考慮A[1...i-1]中它的合適的插入位置k,然后將A[k...i-1]依次后移一個位置,把A[i]插入到A[k]的位置即可


歸并排序實現(偽代碼):

merge sort(A[1...n])
  1. if n=1 done
  2. recursively sort A[1...n/2] and A[n/2+1...n]
  3. merge 2 sorted lists

將一個表分成兩部分遞歸排序,遞歸處理的兩個表已經有序了后進行合并


關注運行時間,依賴于
-數據的輸入情況,數據是否有序
-數據的規模
-找到運行時間上界。一般情況下,我們需要找到這個程序對于最壞的輸入數據的情況下,運行時間是多長。As a guarantee to the user


幾種分析運行時間的方法
Worst-case:(usually)
用T(n)來表示算法在輸入規模為n時的最大運行時間
Average-case:(sometimes)
用T(n)來表示算法在所有輸入規模為n的序列的運行時間的一個期望值
基于假設:輸入的統計分布,一種常見的假設就是均勻分布,所有輸入都以相同可能的方式出現。
Best-case:(bogus)
用一組極好的數據在一個效率極低的算法上跑,沒有說服力。

那么插入排序的Worst-case時間是多少?
首先取決于運行的機器,所以當比較算法時,通常比較的是相對速度(在同一臺機器上)

Big Idea——引入漸近分析
忽略那些依賴于機器的常量
關注當n趨近于無限大時,T(n)的增長

漸進符號(Asymptotic notation)
θ-notation:忽略所有的低階項和常數因子,只分析最高階項

3n3 + 2n2 + 4n + 1=θ(n3)

如果算法A的漸近時間復雜度是θ(n3),算法B的是θ(n2),那么一定存在一個足夠大的n,算法B的運行時間要小于A


對于插入排序的分析

T(n)分析

T(n)=Σθ(j)=θ(n2)

所以插入排序夠快嗎?
當n比較小的時候比較快,但是當n變大時效率會很糟糕


對于歸并排序的分析

T(n)分析

T(n)=2T(n/2)+θ(n)=2T(n/2)+cn=θ(nlgn) | constant c > 0

歸并排序能夠在效率上當輸入規模n增大的時候漸近的超過插入排序,在最壞的情況下。實際上,當n>30以及以上的時候,歸并排序的效率就比插入排序的效率要高了

文中圖片來源:http://www.cnblogs.com/beautiful-code/p/4923632.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,923評論 6 535
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,740評論 3 420
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,856評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,175評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,931評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,321評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,383評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,533評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,082評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,891評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,067評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,618評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,319評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,732評論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,987評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,794評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,076評論 2 375

推薦閱讀更多精彩內容

  • 概述 排序有內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部...
    蟻前閱讀 5,209評論 0 52
  • 概述:排序有內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部...
    每天刷兩次牙閱讀 3,740評論 0 15
  • 一. 寫在前面 要學習算法,“排序”是一個回避不了的重要話題,在分析完并查集算法和常用數據結構之后,今天我們終于可...
    Leesper閱讀 2,544評論 0 40
  • 又是這個點了 是啊又到點了 敲門聲又響起了 我像是躺在客廳沙發上 我想我應該應該是沒喝酒的 分不清正敲門的是天使還...
    石中麥閱讀 157評論 0 2
  • 廠工會請清華醫院送健康下基層活動 崔醫生分三部講解 頸腰椎知識 頸椎病變,腰椎病變,腰肌勞損,腰椎間盤突出的知識 ...
    Expe閱讀 370評論 1 1