[學習筆記]基本認識運算思維

學習有邏輯的解決問題

運算思維Computational Thinking

運算思維是一種思考過程,其中包含擬定問題並敘述解決方法,是人或機器都可以掌握的思考模式。

運算思維可以訓練邏輯思考、提升問題解決的能力。學習將問題拆解,找出有效的解決方法。有助於了解用電腦的邏輯來解決問題的思維。在和工程師或技術團隊合作時,可以增加溝通和工作效率,也有助於學習其他事物。

運算思維的四步驟:

  • 拆解 (decomposition):將問題拆解成較易處理的小問題。
  • 規律辨識(pattern recognition):檢視拆解後的問題,是否存在規律或趨勢。
  • 抽象化(abstraction):找出產生規律的規則。
  • 演算法 (algorithm):設計逐步執行的指令解決問題。

以細胞為例:

拆解細胞擴散:細胞的數量→由細胞分裂次數決定→次數由時間決定。

辨識其中的規律:假設每秒增長兩倍,一秒後2個細胞,兩秒後2*2個,三秒後2*2*2個,由此可知是2的幾秒次方。

把其抽象化:細胞的數量n秒後是2^n

演算法:將發現的規律定義寫入電腦,讓電腦執行。

了解甚麼是演算法:

可以先看看維基百科的解釋,其解釋簡單敘述是說:「在數學和電腦科學中,如何明確的解決一些問題的規範,算法可以經由計算、數據處例、自動化及執行其他任務。」
教材中提到一本書籍 《人類大命運:從智人到神人》,簡中版稱為 《未來簡史》其中有說到。

「演算法是一系列有條理的步驟,能用於計算、解決問題、做出決定。」 — 《人類大命運:從智人到神人》

對於在環境和輸入不變化的情形下,演算法可以每次執行同一組指令時,會得到相同的結果。

設計演算法的流程:

在設計之前必須先清楚定義輸入與輸出。

輸入(需要的資訊、待解決的相關資訊)→演算法(系統化指令)→輸出(得到結果或問題的答案)

演算法的類型:

  • 簡單遞迴演算法(Simple recursive algorithms):使用遞迴計算來找出答案,適用於古典問題。
  • 回溯法(backtracking):為找到解決方法,將一個問題分為多個計算用的路徑,如果方向錯誤,回到上一個位置,從另外一個開始計算。使用於大量數據中找特定資訊。
  • 動態法(Dynamic):這個演算法會記憶之前解決過的問題,藉由解決過的問題經驗更快找出類似問題的解決方法。假使計算過2^1000可以根據之前計算在計算出2^1001。
  • 分而治之法(Divide and conquer):最常見的類型。將一系列數字分為多部分,再將其比較排序。這種方法速度比起只排序不分割的演算法還快好幾倍。
  • 暴力法(Brute force):駭客最常使用的演算法。假設要駭入帳號,變一次嘗次所有可能的密碼組合,依賴電腦的演算速度。
  • 貪婪法(Greedy):與暴力法類似。根據當前狀,找出最佳解決方法,常使用於尋找與決定行駛路線。演算法不會計算抵達目的的所有可能,只選擇距離下個檢查點最短的路線,且不會考慮其他檢查點之後的路線。