TOCEC
資訊學群
總評比分數: 4.23 顆星

Think Data Structures: Algorithms and Information Retrieval in Java


本書作者:Allen B. Downey
出版年份:2016
授課名稱:計算機演算法

書評教師:國立臺北科技大學 資訊工程系 林濬璈 助理教授

【總評】

整體評價:
這本書是適合資料結構與演算法的初階教科書,涵蓋學生應該掌握的主題,從排序(Ch. 17)、資料結構(Ch. 3—6, 10--14)到演算法複雜度分析(intro in Ch. 2 and applied in every chapters)都有扎實的介紹。最主要的特色是實作與理論並重:全書以 Java 程式語言範例作為實作細節的展示,同時也深入解釋演算法的數學分析,程式撰寫練習的同時能理解效率背後的理論依據。
試用心得:
1. 本課程搭配Java程式語言的實作與練習講授計算機演算法,學生的Java程式能力並不一致,課前甚至有學生表達自己沒學過這程式語言,每週三小時的課程並無法兼顧傳授演算法知識與手把手式的程式能力訓練,僅能透過實作作業與教科書來學習。原本預期會有大量程式撰寫不熟悉的問題,然而學生皆能以教科書自學補充的方式完成課程學習的要求。

2. 本(大三)課程預設學生具備資工系大二必修的資料結構知識,然些許外系與跨校選修的同學相對背景知識較差,儘管上課會簡短複習必備知識,基礎不扎實的同學仍需透過自我學習來補齊。教學過程中,透過開放教科書的研讀,大多數學生約能在最晚第四五週時便能進入正常學習狀況。

3. 未盡的部分是欲教授的課程內容與此開放教科書的內容並不完全一致,圖論演算法為演算法學科之中重要的範疇,此開放教科書並無太多的著墨,必須靠自編教材來進行補充。
提供試用後之建議,給欲使用此參考書授課之教師:
以計算機演算法課程來說,前半學期的內容皆可按照這本教科書的安排來授課,計算機科學是一門科學也是一門技術,這本書的內容兩者兼具,算是適合的選擇。然而課程內容上此書並不涵蓋圖論演算法(一般來說於下半學期教授),必須搭配其他教材來實行。
【分項評比】

完整性(Comprehensiveness):
Pro: 章節設計採主題式的安排,從基礎資料結構如 linked list,resizable array, binary tree, hast table, ..etc 一路進入排序、搜尋與資料搜索。符合典型資料結構與演算法的課程進度需求。
Con: 深度與進階題材略微不足:複雜度理論、較為複雜的圖論演算法等稍微進階的主題皆沒有提及,需搭配額外的教科書來補充。
內容正確性(Content Accuracy):
無明顯錯誤,且持續更新如範例的 Github repo 皆有持續更新,與新版本的 Java 相容性良好。
一致性(Consistency):
單一作者撰寫,語調與表達方式統一;Java 程式撰寫的命名風格與程式設計風格一致,說明簡要清楚。
清晰性(Clarity):
學生課前預習課後複習效果還不錯,鮮少有學生反應看不懂
組織結構流暢度(Organization Structure Flow):
章節循序漸進連貫不衝突,也幾乎沒有穿插無預備知識的主題。唯有最後少數章節本因為學科本身的不同面向而有些跨度,此狀況常見於資訊學門的各種課程,授課教師可自由取捨並安排自己偏好的主題。
語法誤差度(Grammatical Errors):
無明顯誤差
文化相關性(Cultural Relevance):
國內教科書無非過於理論或是過於偏向實作應用,本書算是取得一個不錯的平衡。
模組性(Modularity):
本書大致可分為三大主軸:
1. Java 與程式設計基礎:介紹 Java interface 的使用與 List 設計,並介紹 Big-O 基礎,提供效率複雜度的分析基礎。

2. 常見資料結構與演算法:從 array->list->doubly list->stack/queue->tree->map->hash table->HashMap->TreeMap->BST,章節的串接不僅是內容相關,也反映實務中資料結構與演算法的漸進設計。

3. 資料檢索應用導向:應用章節與前面章節的知識連結自然,然而這部分可以作為取捨,銜接其他授課教師更想分享或教授的應用。
Relevance Longevity(銜接新知之容易度-教科書內容之敘述方式、範例或時事等…):
資料結構與演算法是基礎課程,如前述本書有持續更新,範例程式也有定期更新相容於新版本的 Java。
Interface(介面之適用性-是否因為不同瀏覽器或不同行動載具,而格式不正確或圖片扭曲):
本書提供許多不同的介面,網頁版、PDF 版本皆有固定格式不會因為瀏覽器或應用程式的不同而有格式不正確。同時,本書的 LaTeX源碼亦有提供,讀者若具備 LaTeX 排版知識可以自行排版編譯成自己喜歡閱讀的格式。
專業程度(Professional knowledge):

這本書是適合資料結構與演算法的初階教科書,涵蓋學生應該掌握的主題,從排序(Ch. 17)、資料結構(Ch. 3—6, 10--14)到演算法複雜度分析(intro in Ch. 2 and applied in every chapters)都有扎實的介紹。
深度與進階題材略微不足,比方說複雜度理論、較為複雜的圖論演算法等稍微進階的主題皆沒有提及,若在課程最後欲教授較為深入的主題,需搭配額外的教科書來補充。

教學資源(Supplementary Resources):
書中的 Java 程式範例與習題皆有提供且持續更新。

Go to open textbook
https://open.umn.edu/opentextbooks/textbooks/621