MIT演算法開放式課程 Lecture 1: Algorithmic Thinking, Peak Finding
這系列是記錄我自己從MIT的開放式課程:Introdution to Algorithms中之所學 相信很多跟我一樣自學程式語言的人很常聽到人講:演算法跟資料結構很重要 但這兩個東西到底要怎麼學?隨便拿一本原文書都是厚厚一本,看完不知道要到民國幾年,而且也不知道重點在哪 看影音課程我認為是個比較好的方法,一來一堂課不到一個小時不會看到恍神,二來有真人講解比較容易理解與抓到重點 這個課程算是非常的淺顯易懂,講師由兩位教授輪流授課,兩位講解得都算很清楚,速度也不會太快 非常適合跟我一樣完全無基礎的人自學 雖然課程中有說他在這堂課使用的語言是Python,但其實只是偶爾會寫幾行這個演算法的Python實作出來,不懂Python也沒什麼影響 我的文章主要是把他每堂課中我認為的重點抓出來,以及補充一些我自己的心得 一些課堂上太細節的東西我就不會寫了以免模糊了焦點 那麼底下就開始進入第一堂課 課程連結: https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/lecture-videos/lecture-1-algorithmic-thinking-peak-finding / 第一堂課沒有講到太多技術性的東西,所以我會花比較多篇幅介紹所謂的複雜度(Complexity) 首先講師提到了什麼是演算法 演算法就是處理一大群輸入資料來得到我們想要的結果的過程 一個演算法我們主要在意的有以下兩點: Efficient :這應該很好理解,就是演算法的速度,另外也包含記憶體的使用效率 Scalability︰ 這個詞我想不到比較好的中文翻譯(Google翻譯為可擴展性),意思就是當輸入資料的數量變得越來越多時,這個演算法的運作情況是否能一樣好,而不會不成比例的變慢 例如資料從一萬個變成兩萬個時,演算法的速度是不是只是從10ms變成20ms 另外我們評斷一個演算法的好壞時,常常用$T(n)$代表一個演算法的效率 $n$是輸入資料的數量,$T(n)$代表這個演算法的複雜度,複雜度又分時間複雜度(計算速度)及空間複雜度(所需記憶體空間) 那這個$T(n)$的單位究竟是什麼呢...