-
資料結構 (Data Structure)
不同的資料會有不同的儲存方式,而這些擺放的方式都會影響到程式設計,而這些儲存資料的方式就稱為資料結構。事實上,更精確地來說資料結構是希望更在有限的記憶體中,進一步控制資料存放的位置或順序,有組織的存放資料配合適當演算法,可以有效提高運算速度。原則上,資料結構主要是專注於以下的問題:
- List/Array
- Stack and Queue
- Linked List
- Tree/Binary Tree
- Graph
- Hash Table
- Heap
- Sorting
另外,其實適當的資料結構搭配適當的程式撰寫方法,可以讓可以幫助程式的可讀性提高,也可以讓運算效能進一步提升,因此如何將程式寫得更有系統、更有架構,需要大家多聽多看多寫了,勤總是能補拙的!
-
演算法 (Algorithm)
解決問題的方法或運算後,將結果輸出,整個就是演算法。若更進一步的定義就是,在同一個問題中,只要能解決掉worst case的方法就是算一正確的演算法。若要進一步判斷一個演算法的好或壞,最基本的兩個判斷依據就是這個演算法有多快以及他需要用到的記憶體有多少,或說需要考慮演算法的「時間複雜度(Time Complexity)」與「空間複雜度(Space Complexity)」,其中演算法又更專注於解決時間複雜度。而目前演算法中,最簡單就是暴力法吧(Brute Force),演算法沒錯,就只是沒效率。而以下算是常見或者很基本的演算法設計的入門:
-
Divide and Conquer
-
Dynamic Programming
- Greedy Algorithm
- Graph Algorithms
- NP-Completeness
在過去的幾天大致上有提到比較多的List、Array以及Divide and Conquer和Dynamic Programming,有興趣的話這一次比賽有很多高手在介紹這些內容,由於小弟才剛剛學會如何鑽寫程式,因此在於很多資料結構以及演算法的熟悉度不高。