MIT算法導(dǎo)論一 簡介

本系列文章根據(jù)MIT公開課程:算法導(dǎo)論,并結(jié)合《算法導(dǎo)論》進(jìn)行整理。

Analysis of algorithm 算法分析

關(guān)于計算機(jī)程序在效率資源利用方面的理論研究

首先提出幾個問題?

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

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


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

插入排序?qū)崿F(xiàn)(偽代碼):

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]的位置即可


歸并排序?qū)崿F(xiàn)(偽代碼):

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

將一個表分成兩部分遞歸排序,遞歸處理的兩個表已經(jīng)有序了后進(jìn)行合并


關(guān)注運行時間,依賴于
-數(shù)據(jù)的輸入情況,數(shù)據(jù)是否有序
-數(shù)據(jù)的規(guī)模
-找到運行時間上界。一般情況下,我們需要找到這個程序?qū)τ谧顗牡妮斎霐?shù)據(jù)的情況下,運行時間是多長。As a guarantee to the user


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

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

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

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

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

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


對于插入排序的分析

T(n)分析

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

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


對于歸并排序的分析

T(n)分析

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

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容