資料結構 - 交大修課心得
單純記錄一下自己的肝都用在哪裡
課程資料
資料結構 Data Structures
教授:黃俊達
修課年度:107上 電工系(大二上)
教科書:Fundamentals of Data Structures in C++ 2/e
我的額外參考書:打下好基礎:程式設計與演算法競賽入門經典
額外參考書勘誤整理:程式設計與演算法競賽入門經典_勘誤
GitHub: NCTUEE/1071_Data_Structure/
需要的基礎
程式設計﹑C++。
課程大綱
chapter 1:Basics
chapter 2:Arrays
chapter 3:Stacks and Queues
chapter 4:Linked Lists
chapter 5:Trees
chapter 6:Graphs
chapter 7:Sorting
chapter 8:Hashing
上課方式
上課以投影片為主。老師依照投影片的內容仔細講解,並加以補充。
阿達老師是位非常有教學熱忱的老師,個人認為他教的非常好,無論是觀念或是程式碼,都講解的十分清楚。不過老師對於『考古題』這件事十分在乎,通常考卷分數確定沒問題後,就會被收回去,不太有機會留傳給學弟妹。
我習慣將講義印出來,跟著老師的進度作筆記,之後複習比較有印象。
阿達老師的課真的很熱門,當初修這堂課的時候工四大教室被塞得滿滿滿的,開學第一堂課老師還努力勸退一些人不要修,不然教室要塞不下啦🙃。
評分方式
Attendance:10%
Programming Assignments:30%
Midterm:30%
Final:30%
作業
GitHub: NCTUEE/1071_Data_Structure/
HW1:Prime Checker
HW2:走迷宮問題
HW3:以 List 實現多項式
HW4:實作 Binary Search Tree
HW5:Graph
最後一次作業比較燒腦,助教說並沒有所謂的最佳解,我自己設計了一套演算法去優化。不過最後排名出來時,前幾名的performance都差不多,可見應該還是有一些比較好的方法來解這個最短路徑的問題。
考試
年代久遠,已經忘記☹️。不過應該是有讀有分的考試。
心得
關於這門課,我個人的學習曲線跟大家應該不太一樣。
大一下時已經修過離散數學﹑物件導向程式設計:大二上時,我同時修了資料結構(大二課程)與演算法(大三課程)。本門課的內容前半部與離散數學﹑物件導向程式設計重疊﹑後半部則是演算法前半部課程的簡化版;再加上我高中時就有參加資訊能力競賽的經驗,除了 chapter 8:Hashing 以外,其他章節高中都有稍微接觸過。因此這門課對我來說挺輕鬆的。
讀書方式是將離散數學、資料結構、演算法三科講義交叉閱讀(我很幸運,這三科都是修阿達老師所開的課),並搭配打下好基礎:程式設計與演算法競賽入門經典一起學習。打下好基礎:程式設計與演算法競賽入門經典是由中國的劉汝佳老師所撰寫,內容從程式基礎(語言篇)、資料結構(基礎篇)、到演算法(競賽篇)都有涵蓋。
如同書名,此書是高中準備資訊能力競賽時所購買的,但高中時只讀到語言篇。到了大二修資料結構、演算法時,才又重新將此書拿出來。這時才發現這本書完全不愧對「入門經典」這個書名,上課內容都有對應的章節可以閱讀,且提供豐富的範例及UVa例題讓讀者理解及練習,剛好可以跟上課講義互補缺漏。
程式設計與演算法競賽入門經典_勘誤是我大二時閱讀此書所做的勘誤筆記整理,但一直拖到今年才將筆記整理成檔案寄信給出版社。很可惜的得知此書已經不再出版,不然很推薦大家購買此書搭配課程學習。收到出版社的感謝信真的很開心,希望台灣還能再出版劉汝佳老師的書籍。
相關課程
離散數學﹑物件導向程式設計﹑演算法﹑電子設計自動化演算法與實作