[工程師基礎知識]1. 什麼是演算法?
演算法(英語:algorithm),在數學(算學)和電腦科學之中,指一個被定義好的、電腦可施行其指示的有限步驟或次序[1],常用於計算、資料處理和自動推理。演算法可以使用條件語句通過各種途徑轉移代碼執行(稱為自動決策),並推導出有效的推論(稱為自動推理),最終實現自動化。
-- wiki
簡單來說演算法是定義好一系列邏輯執行的順序、以及過程中判斷的依據。所有處理問題的方式都是演算法,能達成目標之餘讓過程更精簡就是學習演算法的目的。
演算法不應在不同程式語言開發而有所差別,因為演算法定義的是處理問題的方法。為了和不懂程式,或者寫不同程式語言的人溝通,可以把流程照順序寫出。
有時日常生活中也可能因為理解方式或斷句方式不同,發生期望的和實際達到的結果不同的情況。
先來個笑話:

把邏輯寫成條列的步驟之後會像下面這樣
老婆想的:
買10個包子
如果有賣西瓜
就買1個(西瓜)
老公理解的:
要買包子,預設買10個
如果有賣西瓜
就改買1個(包子)
否則
維持預設的10個包子
日常溝通可以依照每個人講話省字的習慣和上下文推敲,實際上不會發生這樣的笑話(應該不會吧?)但是寫程式是不能省字不會推敲的,改寫的步驟就是要寫完整,否則不是程式執行錯誤就是他人修改時看不懂。
除了正確的執行順序和內容,確保輸出的結果正確之外,選擇演算法還有一個重點,那就是這個演算法至少要有足夠好的效率。
如何判斷演算法的好壞?
演算法的好壞和程式整潔以及可讀性是兩個議題,這裡不討論效能正常但不好讀不好改的情況。
什麼叫做「足夠好」的效率?
實際執行可以順利跑完,而且花費時間在需求範圍內(操作者等待時間合理)
現在這時代如果登入論壇需要等待一分鐘,多數使用者都會翻臉吧
開發測試的過程需要考慮可能的資料量,量大的時候時間增加幅度多大,會不會造成效能問題。
舉例來說,查詢資料報表最多限查一年份的資料,匯出一個月資料2萬筆要10秒,匯出一年20萬筆資料卻花了超過10分鐘都沒完成,那就代表這是不合格的寫法,資料量增加的倍數和花費時間的增長比例差太多了,而且10分鐘並不是使用者願意等待的時間(依實際需求要求而定)。
此外,執行時間太長的邏輯同時也代表它占用系統資源的時間長,過程中也可能因為工作沒結束導致占用的記憶沒有釋放,進而造成服務塞車或是發生記憶體不足的錯誤,畢竟服務正式運作的時候通常不會當成只有一個人使用對吧?
如果會計算時間複雜度,只要看懂程式就可以大致上釐清有沒有效能問題。
(下集待續)
喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!