![]() | Beginning Algorithms Simon Harris、James Ross/著 Wrox出版 售價:39.99美元 推薦:Amazon五顆星 |
資料結構與演算法的課程,只要是資訊相關科系的同學必然接觸過,對於演算法的定義,筆者在網路上搜尋了一些相關資料,找到洪朝貴教授一句十分貼切的形容:「有規律的愚公移山」。要能用最有效的方式重複地進行工作,必須了解這個工作最花時間的地方在哪裡。
筆者自從開始工作之後,便很少再回頭碰相關的議題,主要專案的性質大多以應用系統為主,至於演算法的細節,倒不那麼在乎,也是因為目前所使用的程式語言,多數已提供相對應的程式庫及函式呼叫,便於直接使用而不需重頭再來。
演算法能幫上什麼忙呢?
若你的工作對計算機系統資源錙銖必較(像是IC設計、嵌入式系統、手機應用等),演算法的觀念就顯得重要許多。在這些有限資源下,要發揮高效能的運算處理,資料量的增加對處理時間增量的影響有多少,必須瞭若指掌,才能撰寫出品質良好的程式碼。
這些常見的演算法如排序(Sort)、堆疊(Stack)、佇列(Queue)、樹(Tree)等操作,你應該都已耳熟能詳,這些資料結構或演算法,通常不需要自己動手打造,不管是採用Java或C#等通行的程式語言,這樣的演算法通常已被完整包含在平臺提供的函式庫中,僅需輕輕鬆鬆直接呼叫API即可。所以這也是演算法在工作之後會逐漸被遺忘的原因。
精神在於建立思考過程
當然,這些已經十分通俗常見的演算法觀念,對於剛接觸電腦科學這領域的新手來說,的確是一門必須好好花點心思,打下紮實底子的重要基本功。從研究這些演算法的過程中,能深深體會每個演算法的運作細節,除了瞭解如何運用這些演算法之外,同時可以思考不同的運作方式對系統效能的影響,從這樣的精神延伸到未來面臨其他應用時,也能用相同的思維來檢驗自己所撰寫的程式碼,找到系統負荷的瓶頸所在。
演算法與使用那一種程式語言來撰寫並沒有絕對的關係,演算法所要表示的精神是以不同的處理邏輯及順序來達到某特定目的,而處理過程中在不同情境之下,將有不同的效果。
本書以Java為實作演算法的程式語言,故閱讀本書必須對J2SE標準的函式庫有基本的認識。作者針對程式開發人員在工作經常遇到的演算法及資料結構,以淺顯易懂的方式,說明每個演算法的意義,結合實作的範例讓讀者更清楚其應用的方式為何,每個章節並附上練習題目讓讀者自我檢定學習的效果。與過去筆者在學生時代由教授選讀的教材相比,本書無論在章節設計上及程式範例的,閱讀起來的確是輕鬆許多。
廣泛討論各種演算法,參考價值高
本書首先從Big O的觀念介紹起,這是在討論演算法複雜度時相當重要的一環,接下來便依序介紹迭代(Iteration)與遞迴(Recursion)、(List)、佇列(Basic & Priority Queue)、堆疊(Stack)、基本及進階排序法(Basic & Advanced Sorting)、二元及三元搜尋樹(Binary & Ternary Search Tree)、雜湊(Hash)、集合(Set)、平衡樹(B-Tree)、字串搜尋及比對(String Searching & Matching)、計算機幾何學(Computational Geometry)、程序最佳化(Pragmatic Optimization)等議題。
在討論每個主題時,作者以圖例的方式,先說明演算法本身代表的意義及使用時機,針對該演算法進行Java程式碼的實例探討,而針對不同類型的資料結構亦會與其他相關的主題相互比較,方便讀者分析思考;此外,本書在實作每一個演算法時,亦會搭配單元測試框架JUnit來驗證程式碼的正確性,結合當今流行的測試驅動開發(Test-Driven Development)的觀念,一般的演算法書籍十分少見。
如同大師Niklaus Wirth的著作《Algorithms +Data Structure=Program(演算法+資料結構=程式)》所示,資料結構與演算法即為程式設計的基礎。想練成所向無敵的無影腳之前,好好地紮穩馬步才是基本要領。
《作者簡介》陳宏一
交通大學資訊管理研究所碩士,現任億訊國際資深顧問。曾任職於南亞科技資訊部工程師、資迅人網路研發副理、艾群科技產品研發部經理,專精於OOAD、J2EE 相關技術、Open Source、資料庫設計、軟體開發流程及專案管理等;取得SCJP、SCWCD、SCJD、SCEA、ITIL等認證。曾經歷大型社群及電子商務網站、WAP/3G行動加值服務、CTI/CRM客服系統架構規劃設計等。