麻省理工算法導論學習筆記(1)----算法介紹


  我決定啃幾個大塊頭,今天開始跟着公開課學習,一是鞏固自己對算法理解,二是可以分享學習心得。

  普林斯頓大學的算法課好像也講完了,只有講義,好像還沒視頻,下面我先學麻省理工的算法導論課。

  我是一個懶孩子,希望大家監督我。沒有監督,俺繼續不下去,呃哈哈。謝謝。

  為什么學習算法?

  (1)什么比性能更重要?正確性,簡潔,可維護性,成本開銷,功能性,模塊化,安全,可擴展性,用戶體驗等。

  (2)如果算法和性能不重要,為啥關注呢?為什么學習?性能與體驗關聯,實時性,性能是其他的基礎,性能就像貨幣,你用java來代替c,損失三倍性能,為的是其他方面的優越性,比如對象化,exception機制等。

  排序問題

  (1)插入排序(Insert Sort)

  

插入排序分析:  

  運行時間依賴於輸入,比如輸入的個數,輸入的排序情況。移動、比較的次數可作為衡量時間復雜性的標准。

  最大時間(最壞情況,是一個承諾,一個保證):輸入逆序。

  

比較次數:(n+2)(n-1)/2

移動次數:(n+4)(n-1)/2

  平均時間(時間的期望值):n+假設的輸入分布,比如均勻分布。

  

  最少時間(最好情況):輸入正序。

  比較次數:n-1

  移動次數:0

  插入排序快不快?當n很小的時候,挺快,當n很大,就會很慢,通常n<=8。

  (2)歸並排序(Merge Sort)

  將兩個已經排序的序列合並成一個序列的操作。歸並排序算法依賴歸並操作。

   

  歸並排序分析:

  在實際中,當n>30的時候,歸並排序將打敗插入排序。

  比較操作的次數介於(n log n)/2 n log n - n + 1

  賦值操作的次數是(2nlogn)

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM