[閒聊] 演算法設計

我做演算法設計很久了,以前覺得 PTT 的人『很ㄎㄧㄤ』的程度還能忍受時,每當在像 C_and_Cpp 看板或者 Problem_Solve 看板看到一些值得想的問題,就會一直想下去。

到現在,我覺得演算法設計似乎還是蠻不系統化的,雖然方法很多,但是絕大部分時候你會看到設計者所表達他之所以想得出來,就是因為想得出來。神來一筆、福至心靈。

為什麼演算法設計這種這麼多人參與的事情,卻沒有相當有內容的書籍,將方法論整理呢?我覺得其中一種可能的因素,是一旦這種書寫出來,會被當作哲學類的書本,而程式人看哲學書很少人不睡著。

稍微隨便想一下,在我的經驗中,演算法設計的成立可分為三塊:

  1. 由數理邏輯基礎,以建構式數學方式產生答案。
  2. 以模仿以往見過的操作程序來達成:例如雙向陣列掃描用在一維或二維陣列搜尋,都有效。
  3. 將各種 2. 的片段方法盡力拼湊,努力久了就找到答案。

而任何一個演算法的開頭三段,依序說明 input, output, invariant ,是最簡單的步驟。

閱讀 Lin Quan 的 “Top 20 coding interview problems asked in Google with solutions: Algorithmic Approach" ,有所感受。

 

廣告

About 黃耀賢 (Yau-Hsien Huang)

熱愛 Erlang ,並且有相關工作經驗。喜歡程式語言。喜歡邏輯。目前用 Python 工作。
本篇發表於 Uncategorized。將永久鏈結加入書籤。