資料結構 - 交大修課心得

單純記錄一下自己的肝都用在哪裡

Mirkat
MIRKAT X BLOG
Jul 17, 2021

--

I don’t own the rights of this picture, see link.

課程資料

資料結構 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例題讓讀者理解及練習,剛好可以跟上課講義互補缺漏。

程式設計與演算法競賽入門經典_勘誤是我大二時閱讀此書所做的勘誤筆記整理,但一直拖到今年才將筆記整理成檔案寄信給出版社。很可惜的得知此書已經不再出版,不然很推薦大家購買此書搭配課程學習。收到出版社的感謝信真的很開心,希望台灣還能再出版劉汝佳老師的書籍。

寄送勘誤整理給出版社後,所收到的回信

相關課程

離散數學﹑物件導向程式設計﹑演算法﹑電子設計自動化演算法與實作

--

--