【Python進階教學】進階排序法:快速排序法 / 合併排序法【part 17】
【Python進階教學】進階排序法:快速排序法 / 合併排序法【part 17】 哈囉大家好,很感謝你點進本文章,我是一名高中生,是電腦社社團的社長,由於我並不是 Python 這方面非常精通的專家,所以若文章有些錯誤請見諒,也可向我指正錯誤。另外本文章的用意是作為電腦社社團的教材使用而編寫的。 那麼,讓我們開始吧。 快速排序法(Quick Sort) (快速排序法概念圖)Image Source:Unraveling QuickSort: The Fast and Versatile Sorting Algorithm | by Nathal Dawson | Medium 快速排序法步驟: 序列中尋找一個基準值(pivot) 進行快速排序法,所有比基準值小的排左邊,比他大的排右邊。 使用遞迴式對左右兩邊的子序列作與 2. 相同排序。 註:基準值可使用隨機的抽取方式,或是自定義一個基準值。 看到這邊,或許你發現到快速排序法其實類似於二分法的步驟,只不過特別的是,快速排序法需要使用到遞迴式,這個概念使用到了所謂的 分治法(divide and conquer) 的其中一...
【C++ 筆記】運算子(下) - part 5
【C++ 筆記】運算子(下) - part 5 很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 運算子(Operator) 讓我們回顧 part 3 內容, C++ 有支援以下運算子: 算術運算子 - part 3 已學過 關係運算子 - part 3 已學過 邏輯運算子 位元運算子 指定運算子 運算元(Operand):在運算式中,運算元是資料的值。在例子「1 + 1」當中,兩個「1」都是運算元,運算元是被操作、運算的物件。 運算子(Operator):運算子是一個進行操作的符號。在例子「1 + 1」當中,「+」就是一個運算子,表示加法操作、運算。 運算式(Expression):運算式是由運算元和運算子組成的結構,用於進行計算並回傳結果。在例子中,「1 + 1」就是一個運算式,進行加法運算並回傳結果為「2」。 算術運算子:就是數學運算子,+、-、*、/...
【C++ 筆記】條件判斷 - part 4
【C++ 筆記】條件判斷 - part 4 很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 條件判斷(Condition) Image Source:Decision Making in C (if , if…else, Nested if, if-else-if ) - GeeksforGeeks Condition,表示一個情況,也可稱之為一個條件。 以上的圖中是 if 語句的流程圖,Condition 如果是 True 的話,則會經過 if Condition 判斷,直接進入到 username code,這個 username code 就是要由我們自己定義的執行內容。 如果 Condition 是 False,同樣也會進入到 username code,一樣是要由我們自己定義的執行內容。 回到正題,C++ 當中有四種條件語句的形式: if if-else else if swi...
【C++ 筆記】常數 / 運算子(上) - part 3
【C++ 筆記】常數 / 運算子(上) - part 3 很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 回顧上集內容: C++ 常見常用資料型態:int、float、double、char,目前只要記得這些即可。 常數(Const) 常數就是不能變的數,被定義為常數後就是一個固定值,又稱實字(也可稱字面量:iteral)。 實字就是字面上的數值,1 就是 1,他固定不變,總之就是表示固定不變的量。 總之就把常數想像成是將一個人石化就對了! 常數定義如下: 1#define identifier value 或 1const type variable = value; type -> 資料型態 vairable -> 變數 value -> 數值 以下是一個範例: 123456789101112131415#include <iostream>using na...
【C++ 筆記】資料型態 / 變數 - part 2
【C++ 筆記】資料型態 / 變數 - part 2 很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 資料型態(or 資料型別:Data Type) 資料型態,也有很多人稱資料型別,其實都一樣意思,都叫做 Data Type。 問題來了,啥是資料型態呢?簡單來說,就是資料的型態。 咳、咳(清嗓),正確來說,在數學上我們將實數分為有理數、無理數,有理數又可分為整數跟小數,就是差不多這個概念啦! 所以資料型態就是將資料分類成不同的類別。 那另外呢,因為我們程式在執行的時候,需要在記憶體空間當中運算並且儲存這些資訊,而每個資料型態都是不同的個體,每個資料型態的儲存容量也不太一樣,所以接下來資料型態你會看到有它的範圍所在。 好的,接下來是C++的基本內建型態: 內建型態(Built-in Type) bool - 布爾型態 or 布林型態 char - 字元型態 int - 整數型態 float...
【C++ 筆記】簡介 / 環境安裝 / 基本語法 - part 1
【C++ 筆記】簡介 / 環境安裝 / 基本語法 - part 1 很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,輕鬆的自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 簡介(Introduction) C++ 是一種高階語言,它是由 Bjarne Stroustrup(比雅尼·史特勞斯特魯普 )於 1979 年在貝爾實驗室開始設計和開發的。C++ 進一步擴充並完善了 C 語言,是一種物件導向的程式設計語言。C++ 可運作於多種平台上,如 Windows、MAC 作業系統以及 UNIX 的各種版本。 而 Bjarne Stroustrup 又被稱為是 C++ 之父。 以上是 C++ 的簡短介紹,接著讓我們進入環境安裝的部分。 環境安裝(Environment) Visual Studio:目前普遍認為在 C++ 編寫上最方便的編輯器軟體。 另外推薦:Dev-C++、Code::Blocks 兩大軟體,其中最推薦使用的是 Code::Blocks,...
【Python進階教學】BFS & DFS 廣度/深度優先搜尋【part-16】
【Python進階教學】BFS & DFS 廣度/深度優先搜尋【part-16】 哈囉大家好,很感謝你點進本文章,我是一名高中生,是電腦社社團的社長,由於我並不是 Python 這方面非常精通的專家,所以若文章有些錯誤請見諒,也可向我指正錯誤。另外本文章的用意是作為電腦社社團的教材使用而編寫的。 今天我們要講的演算法是鼎鼎大名、各位耳熟能詳的 BFS / DFS 廣度/深度優先演算法。那在深入 BFS / DFS 廣度/深度優先演算法之前呢,我們需要理解一下圖形理論的相關基礎知識,才能夠對 BFS / DFS 有更深入的了解。 接下來,讓我們進入正題(作者冒汗:因為這部份真的超難的): 圖形理論(Graph Theory) 圖形理論簡稱圖論(Graph Theory),一個圖形可以由多個節點(node),或說頂點(vertice),跟連接節點的「邊線」組成,如下圖: Image Source:From left to right the underlying cycle graph, the associated graphs L… | Download Scien...
【Python基礎教學】佇列 & 堆疊【part-15】
【Python基礎教學】佇列 & 堆疊【part-15】 哈囉大家好,很感謝你點進本文章,我是一名高中生,是電腦社社團的社長,由於我並不是 Python 這方面非常精通的專家,所以若文章有些錯誤請見諒,也可向我指正錯誤。另外本文章的用意是作為電腦社社團的教材使用而編寫的。 上次我們談到鏈結串列資料結構的概念,上次的 Python 實作上面作者將其定位為進階教學,不過本次所講的資料結構為佇列、堆疊這兩種,那他們的概念其實都蠻基礎蠻簡單的,在實作上也沒有像鏈結串列那麼複雜。 接下來,讓我們進入正題: 佇列(Queue) 佇列(Queue),是一種線性的資料結構,具有先進先出(first in first out:FIFO)的特徵,特色為從一端插入資料至佇列(enqueue),然後在從另一端讀取資料(dequeue)。 Image Source:Python Stack and Queue - Javatpoint Image Source:Python Stack and Queue - Javatpoint 上圖為 enqueue,表示插入資料進入佇列裡面,我們可以...
【Python基礎教學】鏈結串列【part-14】
【Python基礎教學】鏈結串列【part-14】 哈囉大家好,很感謝你點進本文章,我是一名高中生,是電腦社社團的社長,由於我並不是 Python 這方面非常精通的專家,所以若文章有些錯誤請見諒,也可向我指正錯誤。另外本文章的用意是作為電腦社社團的教材使用而編寫的。 本次教學繼續替各位補充演算法的相關基礎知識,接下來的實作當中對同學們也許會變得越來越難,而作者將這些基礎演算法的定位、定位在 Python 進階教學當中,主要是因為結合 Python 進行實作。 APCS 實作題中的鏈結串列、佇列、堆疊會比較常出現於觀念題當中,若對於 Python 實作這些資料結構感到不 ok 的同學,或許你也可以理解這些資料結構的概念即可,不過到了動態規劃、貪心演算法等這些實作上常用到的演算法,那麼同學你也就想跑也跑不掉了XD。 接下來,讓我們進入正題: 鏈結串列(linked list) Image Source:Applications of linked list data structure - GeeksforGeeks 以上是鏈結串列(linked list)的結構圖,主要可分為...
【Python基礎教學】基本排序法 & 二分搜尋法【part-13】
【Python基礎教學】基本排序法 & 二分搜尋法【part-13】 哈囉大家好,很感謝你點進本文章,我是一名高中生,是電腦社社團的社長,由於我並不是 Python 這方面非常精通的專家,所以若文章有些錯誤請見諒,也可向我指正錯誤。另外本文章的用意是作為電腦社社團的教材使用而編寫的。 接下來,讓我們進入正題。 排序(Sort) 說到排序,我們第一個會想到的那個排序演算法,同時也是最常見最常用的,它就是所謂的「泡沫排序法」或者你也可以說它是「氣泡排序法」都可以,英文都一樣叫作「Bubble Sort」。 而排序在電腦科學中,是指能夠將一串資料依據特定方式排列的演算法。 排列演算法有以下兩種原則: 輸出結果是原始資料位置重組的結果 輸出結果是「遞增」的序列。 如果我們沒有特別說資料要由小到大還是由大到小排序,那麼排序的預設就會是由小到大(升序)遞增排列。而相反的,如果說要由大到小(降序)排序的話,就需要特別給程式說明這是由大到小排序,而這種形式我們就稱為反向排序(reversed sort)或遞減排序。 排序能夠應用到很多地方,例如:成績排序、排名排序、號碼排序等。 ...
【Python基礎教學】lambda & 裝飾器 & 命名空間及作用域【part-12】
【Python基礎教學】lambda & 裝飾器 & 命名空間及作用域【part-12】 哈囉大家好,很感謝你點進本文章,我是一名高中生,是電腦社社團的社長,由於我並不是 Python 這方面非常精通的專家,所以若文章有些錯誤請見諒,也可向我指正錯誤。另外本文章的用意是作為電腦社社團的教材使用而編寫的。 上次我們談完了遞迴,也介紹比列表更快的資料結構:陣列(array),陣列結束後緊接著是類別(class)的介紹,在類別中,又有項功能叫做繼承,繼承不只單一繼承,也能夠多重繼承。今天將上一篇所挖的坑來填補一下(命名空間),也來額外教給各位匿名函數 lambda、裝飾器(decorator)的使用教學。 接下來,讓我們進入正題(本篇長文請注意!)。 lambda(匿名函數) Image Source:Mastering Lambda Expressions in Python: A Hands-On Guide | by John Vastola | Level Up Coding lambda 函式是「只有一行」的函式,可以用來處理一些小型函式,就可以不用為...
【Python基礎教學】遞迴(下)&陣列&類別【part-11】
【Python基礎教學】遞迴(下)&陣列&類別【part-11】 哈囉大家好,很感謝你點進本文章,我是一名高中生,是電腦社社團的社長,由於我並不是 Python 這方面非常精通的專家,所以若文章有些錯誤請見諒,也可向我指正錯誤。另外本文章的用意是作為電腦社社團的教材使用而編寫的。 上次我們講到了基本演算法的概念跟介紹,以及遞迴的概念及實作,今天讓我們繼續完成遞迴的實作,以及說明遞迴的限制及複雜度問題,順便跟大家介紹類別語法。 接下來,讓我們進入正題。 遞迴(Recursion) 遞迴,簡單來說,就是一個函數呼叫自己的函數,像是這樣: 12def a(b): a(b - 1) 上次我們講解遞迴時,以階乘跟費氏數列當作例子進行實作,同時也替大家複習了高一下數學學過的遞迴關係式,我們可以利用這個遞迴關係式來進行解題。 另外遞迴的特點是淺顯易懂,且設計方便簡易,能夠將大問題分解成多個子問題,這凸顯了演算法中的分治法(Divide and Conquer)之精神。 分治法的意思是把一個複雜的問題分成兩個或更多的相同或相似的子問題,直到最後子問題可以簡單的直接求解,...
【Python基礎教學】生成式&演算法&遞迴【part-10】
【Python基礎教學】生成式&演算法&遞迴【part-10】 哈囉大家好,很感謝你點進本文章,我是一名高中生,是電腦社社團的社長,由於我並不是 Python 這方面非常精通的專家,所以若文章有些錯誤請見諒,也可向我指正錯誤。另外本文章的用意是作為電腦社社團的教材使用而編寫的。 本篇將講解生成式(Comprehension)、演算法(Algorithm)、遞迴(Recursion),這些東西都是將來實作Python時非常常見且常用的語法及演算法,總之,你學了這些東西就知道它們到底有多好用了。 生成式(Comprehension) 生成式,又稱為推導式(大陸說法),英文名為 Comprehension。 生成式可以運用在可迭代的物件上,只要撰寫一行程式碼就能完成多行的任務,大幅增加程式碼的簡潔性與可讀性。 在 Python 具有以下幾種生成式: 列表生成式 字典生成式 集合生成式 元組生成式 註:元組 tuple 並沒有生成式,而是用類似生成式的方式產生 tuple。 2024/08/14 補:生成式要從右邊讀到左邊。 列表生成式(List Com...
【Python基礎教學】資料型態函數及方法(下)【part-9】
【Python基礎教學】資料型態函數及方法(下)【part-9】 哈囉大家好,很感謝你點進本文章,我是一名高中生,是電腦社社團的社長,由於我並不是 Python 這方面非常精通的專家,所以若文章有些錯誤請見諒,也可向我指正錯誤。另外本文章的用意是作為電腦社社團的教材使用而編寫的。 上次我們講到了 Number、String 更深入的用法,以及介紹他們特有的函數及方法。本篇教學【part 9】繼續延續上篇尚未講完的資料型態:list、tuple、set。 列表(List) 列表,也可稱為串列(List),說到列表,就讓我們來談及一個概念:序列(Sequence) 序列,是 Python 中最基本的資料結構,是 Python 中的一種內建型態(built-in type)。 內建型態就是建構在 Python Interpreter(Python 直譯器)裡面的型態 簡單來說,內建型態就是在 Python 中不需要額外安裝模組或套件,就能直接使用的資料型態,如同:Number、String 等等。 序列中的每個值都具有對應的位置值,稱為索引(index)。所有索引的開頭都預設為...
【Python基礎教學】資料型態函數及方法(上)【part-8】
【Python基礎教學】資料型態函數及方法(上)【part-8】 哈囉大家好,很感謝你點進本文章,我是一名高中生,是電腦社社團的社長,由於我並不是 Python 這方面非常精通的專家,所以若文章有些錯誤請見諒,也可向我指正錯誤。另外本文章的用意是作為電腦社社團的教材使用而編寫的。 接下來,讓我們進入正題。 當我們在 part 7 談完迴圈以後,其實大部分的簡易實作題型都能勉強應付了,不過我們現在所缺少的是「演算法」、「Python 內建函數及方法」的認知學習及實際應用,接下來會慢慢教給各位上述所言,首先,讓我們先從資料型態的函數及方法開始。 數字(Number) Number 的資料型態被定義為不可變物件,這意味著如果改變 Number 的數值的話,Python 將會自動分配記憶體空間給新的數值。 Python 支援以下三種不同的數值型態: 整數(integer-簡寫為 int):通常被稱為是整數,可以是正或負整數,「不含小數點」。 Python3 整數是沒有限制大小的,可以當作 Long 型態使用,所以 Python3 沒有 Python2 的 Long 型態。布林 (...


