覺得學程式就是在學邏輯,所以決定要回歸最基本的演算法和資料結構,每天學一種。
大致分成幾個部分:排序、堆疊、搜尋,和幾個問題來討論。程式碼主要用Python來示範。
拉蒙碎碎念 還記得以前剛學程式設計的時候,老師都會從幾個較簡單的演算法教起,讓學生比較好學也快上手。其實演算法就是在學邏輯,語法啊、技巧啊,我個人倒覺得是其次。...
拉蒙碎碎念 其實昨天的桶子演算法雖然直覺、簡單好懂,但也遺留了一些問題。舉例來說如果資料很大,就會很浪費空間,或者當資料有小數的時候,沒辦法產生相對應的桶子。因...
有鑒於昨天學的泡沫排序法,效率篇低,就有某位聰明的科學家發明了快速排序法,其實也有用到一點二元分類的概念。 快速排序 (Quick Sort) 的想法是說,先找...
今天來講一個「非比較性」的演算法,基數排序法 (Radix Sort)。其實之前的排序法也是屬於 非比較性 的演算法。怎麼說?以泡沫和快速為例,這兩個演算法都是...
經過前幾天的演算法,都需要小動腦和邏輯上的思考對吧?透過一些比較和分配的技巧,來做資料的排序。 今天,就來講講列舉法 (俗稱暴力破解法)。 列舉法 (Enume...
好啦,討論完幾個演算法後,還是得面對最重要的核心,資料結構。(頓時有種醜媳婦見公婆的概念 該來的還是要來~) 其實資料在程式語言中有很多種型態,像是 int (...
經過昨天介紹的 串列 (Linked List),今天來講一個串列的延伸,佇列 (Queue)。佇列一樣有著串列的特性,每一筆元素本身同時包含著下一筆元素的位置...
堆疊 (Stack) 的特性就是 先進後出 (First In Last Out, FILO)。舉個例子,比如說有一個長深桶子,我們依序放入大小剛好的 1 到...
河內塔 (Tower of Hanoi) 其實也是個古老的題目,最常被用來解釋什麼叫做堆疊。 河內塔最早發明這個問題的人是法國數學家愛德華·盧卡斯。 傳說越南...
分得出來兩張圖片的差別嗎?第一張,我們稱為 樹 (Tree) ,第二張是所謂的迴路,屬於一般的無相圖。 樹有幾個特性: 不包含迴路。 一棵樹中的任意兩個節點...