考資管所的同學比較少能夠在網路上看到資結組的心得分享,因此我希望可以貢獻一點我小小的心得。
何謂資料結構?
「資料結構」是一門研究如何有效地組織、管理和存儲數據以便於高效資料的學科。它涵蓋了各種數據組織方式,如陣列、鏈結、stack、佇列、樹狀結構和圖等。瞭解資料結構對於開發高效的演算法和解決複雜計算問題而言十分重要!
考試重點:
以下內容編排不是唯一,但基本上資管所的資結就是這些東西!
ch1 & ch3 基本(math、big O、stack、queue等等):
這這邊分兩個章節來聊,第一章主要聚焦在一些基本但超重要的概念:
- 遞迴:得搞懂遞迴的基本定義和類型,再來就是一堆跟遞迴扯上關係的演算法。像是經典的Fibonacci序列、二項式係數(對,政大今年考了這個,沒記錯的話)、最大公因數GCD、河內塔、排列組合之類的。這些算法不只要背熟,原理也得弄明白!以下是河內塔演算法示例。 
- 時間和空間需求分析:大部分時間我們都在談時間需求,特別是算法執行的指令次數、時間漸進式之類的。但別忘了空間需求分析也挺關鍵的,尤其是中正特別愛考這塊,比如今年的第一題就是空間需求(QQ)。成長速率的等級、一些必背的公式(master theory)這部分得好好複習,容易忘記但很關鍵。 
第三章則是探討stack和queue,這部分的題目各校基本上都愛考:
- stack、queue的ADT設計及其應用:這塊要有概念,知道怎麼搞定它們的基本操作。
- 前序、中序、後序的轉換和解析:這是個常見的考點,括號法的轉換和求解過程也挺關鍵的,政大以前考過相關演算法撰寫。
- stack和queue的相互轉換:這部分比較少考,但知道怎麼搞會比較好~
ch2&ch4 串列、特殊矩陣
這不是一個很重要的章節,但時不時學校還是會考出來嚇你一下。
- Array的元素儲存位置(中正的最愛):涵蓋了從一維陣列到二維甚至更高維度的陣列元素位置計算。我的建議是,不用死記硬背公式,懂得基本原理和概念,剩下的可以自己推導出來。不過,如果你時間充裕或是無聊,記一下公式可能會更省事。這部分可以參考一下「杰哥」的資料。以下是中正的題目參考。 
- 特殊矩陣:包括下三角、上三角、對稱矩陣、寬代矩陣等。雖然歷年考古題中不常見,但了解一下總是好的。
- Linked List:要熟悉單向鏈表、雙向鏈表、環狀鏈表等。重點在於理解每種的構造方法和特性,還有它們與陣列之間的比較,這些都是挺基本的知識點。
- 一般化串列:這個特別靠X,之前不怎麼考,但今年成大和中央都考了。所以,不要以為不會考就不讀,有記有分!
- 稀疏矩陣:這個不常考,但大部分學校在課程中有提到,所以還算是比較輕鬆的部分。
ch5 樹(基本、高等)
接下來要聊的每個單元,真的超級重要!首先這章節得搞清楚樹的基本概念,包括樹的各種專業術語,像是節點(node)、葉子(leaf)、子節點(child)、兄弟節點(sibling)等等。然後,要深入了解二元樹——這種樹可是大老闆級別的,很多更高級的樹結構都是從二元樹衍生出來的。

每種樹的定義、特性和操作的時間複雜度,這些都得弄得清清楚楚,因為這些基礎會直接影響你對更複雜樹結構的理解。還有,那些高級樹的操作演算法也不能忽視,像是AVL樹的插入演算法,政大今年就出了這題,也是資管考試第一次考到AVL相關的演算法(應該吧)。
所以說,對這部分的掌握不僅僅是考試需要,更是對整個資料結構理解的深化。別小看任何一個細節,每一點都可能是你在考場上拿高分的關鍵。
ch6 圖論
這個章節絕對值得給一百顆星,每個學校幾乎都會考到!首先,得先弄明白什麼是「圖」,然後把基本的術語學牢,像是頂點(vertex)、邊(edge)等。接著是瞭解圖的各種類型,比如有向圖、無向圖,還有像是完全圖(complete graph)、路徑(path)、簡單路徑(simple path)這些術語。至於圖的表示方法,要熟悉相鄰鏈結和相鄰矩陣。

來談談圖的演算法:
DFS和BFS:這是基本功,必須掌握如何實施,以及適用情境。
最小生成樹(MST)演算法:包括Kruskal、Prim、Sollin三種,每種演算法的實作方式和應用場景你都得了解清楚。P.S. 今年成大就考了Sollin演算法。
最短路徑演算法:這包括了DAG最短路徑、Dijkstra、Bellman-Ford、Floyd-Warshall。重點是了解這些演算法是否適用於含有負權重的邊、解決的問題類型、採取的策略,以及它們的時間複雜度。當然,每個演算法的運作過程你也得瞭解得清清楚楚。
AOE、AOV、關鍵路徑:中正曾考過這部分,其他學校不太常見。
這部分內容雖然龐大,但對於考研來說絕對是重中之重。搞懂這些,對圖的理解和應用會更上一層樓,考試時也能更有把握。好好預習,把這些知識點都弄熟,考場上就能游刃有餘!
ch7 搜尋、排序
這章節主要聚焦在兩個方面:搜尋和排序。搜尋方面相對簡單,涵蓋了線性搜尋和二元搜尋。這些基本上在學校都有教過,特別是二元搜尋,記住它的演算法和核心概念就行。
然而,排序才是這章節的精華所在,主要分為初等排序和高等排序,它們主要的區別在於時間複雜度。

初等排序還算簡單,不過我們來聊聊高等排序:
- Shell Sort:這個還算是初等排序的一種,時間複雜度上還沒有一個確定的定論,但補習班上經常會提到一些基本的理解方式。
- QuickSort:必須要精通這個,知道如何對一串數字進行快速排序,特別是它的最差時間複雜度。另外選擇pivot的方法也需要了解。P.S. 政大今年最後一題、中山也都有考。
- MergeSort:同樣重要,需要熟悉如何合併、如何分割,以及需要多少次合併能夠完成整個排序過程。
- HeapSort:首先要懂得如何建立一個堆,然後通過頭尾置換的方式進行排序,這也是經典的考點之一。
- Counting Sort:雖然好像沒考過,但了解其運作方式絕對是加分項。
- Bucket Sort:曾經考過的排序方法,必須要理解其原理和應用。
不只是這些,包括其他沒提到的排序方法,也都得掌握得滴水不漏。要能夠一步一步手動執行這些排序,清晰展示出來,並且要了解它們的特性,包括哪些是內部排序,哪些是外部排序,哪些排序方法是穩定的等等。
ch8 Hash
在Hash這個章節,其實只要你細心點、穩扎穩打,通常都能搞定,沒啥大難題。不過要留心的是,計算時得小心翼翼,特別是要處理好overflow的情況,還有學會怎麼設計一個好的hash function。
不過呢,講到值得深入探討的點,成大今年的考題在hash碰撞這部分就考得蠻細的,包括了碰撞的程度之類的細節(具體的我也記不太清了)。
對了,我還開發了一個hash計算機,如果你們有興趣,等我把它放上線之後你們可以試試看。或是可以連絡我,我直接給你!


結論:
在準備資訊管理系研究所考試時,了解每個章節的核心概念和演算法是關鍵。從遞迴、排序技術、到數據結構的深層理解,每一部分都不容忽視。確保你對二元樹、Hash操作,以及圖的演算法等都有堅實的掌握。
不要等到最後一刻才開始準備。開始你的學習之旅,現在就行動起來,確保在考試中取得最佳表現!








