歡迎來到 何彥南 的
資料結構與演算法(2019-三下)
學習筆記
這些專有名詞很重要,在學習這堂課前可以先去查查看,還有提醒一下,請不要只查中文,英文的資源更豐富。 下面我租略介紹一下關於資料結構與演算法的基本觀念...
在電腦科學中,資料結構是電腦中儲存、組織資料的方式,資料的組織與架構會大大影響資料處理效能,這也是我們學習資料結構的重點所在。
- 常見的資料結構
- 堆疊(Stack)
- 佇列(Queue)
- 陣列(Array)
- 連結串列(Linked List)
- 樹(Tree)
- 圖(Graph)
- 堆積(Heap)
- 雜湊表(Hash table)
我的想法是演算法起源於問題,因為有問題需要透過電腦去解決,所以人們就會定義一個步驟和邏輯達到目的,這就是演算法。許多演算法都是透過某個資料結構為基礎去產生的,針對不同問題會有不同的演算法,但是資料結構是相通的,所以資料結構很重要一好好學。針對同個問題也會有不同的演算法,一般來說新的演算法通常是最出色的,但是在同個問題不同情境下,各演算法的表現又會不一樣。這就要你們去慢慢理解了。
這邊有更詳細的解釋 >> 初學者學演算法|談什麼是演算法和時間複雜度-medium
一個程式的時間複雜度是指完全地執行程式所需的計算機時間。時間複雜度是比較演算法好不好的一個標準,使用時間會隨著資料量變多而增加。這邊我簡單的說一下它的概念,時間複雜度 O(n)
表示,它是趨近於無限的狀況做比較。O(n)
代表說我花的時間與資料量是 1:1 的,而 n^2
代表花的時間是資料量的平方倍。
- 各種常見演算法的時間複雜度可以看這個 >> big-0 時間複雜度表
- 關於
big-o
可以看這裡 >> the basics of big-o notation。
空間複雜度的意思就是你的演算法在處理問題的整過程,最大需要儲存多少暫存。假如說我今天進來的是長度為 n 的 list,而我從頭到尾都只用這個 list 做處理,空間複雜度就是 n ,也稱作 原地演算法-In-place algorithm。如果用了額外的 list (長度為n) 去存取,就是 2n。
我是一個天真、可愛、善良的大學生~
- 就讀於: Soochow University (東吳大學)
- 主修: 巨量資料管理學系
- 生日: 1998/11/26
- 星座: 射手座
- 興趣: 打羽球
- 綽號: 荷花、熊、187
- 擅長程式: python
- Geeksforgeeks >> 最推薦,每個部份皆包含影片,整理完整,除了演算法和資料結構外還有許多其他 CS 學習資源。
- Hackerearth
- Studytonight
- Tutorialspoint
- The Algorithms - Python >> 有許多演算法 python 的範例程式可以參考。
- 關於 computer science 的國外大學課程 >> 給英文程度好,肯努力的人看
- 完整的演算法筆記 >> 感覺有點老舊,但是講的淺顯易懂且該有的都有。
- Coding Interview University 一套完整的学习手册帮助自己准备 Google 的面试 >> 想去 google 看這篇竟對了,包含很多演算法。
- 課程回顧
- 區塊鏈實作分享
- HW1: Quick Sort
- HW2: merge sort
- HW2: heap sort
- HW3: Binary Search Tree
- HW4: hash table
- HW5: DFS & BFS
- HW6: Dijkstra & ruskal
資料結構與演算法這堂課在我們巨量資料的領域是不可或缺的知識,剛開始的時候其實我也蠻排斥蔡老師的授課方式,尤其是作業方面,老實說蠻花時間的。但是慢慢的發現原來在這堂課下,我慢慢建立起了自己的自學模式,這對我來說是一個收穫。我也發現了其實網路上的學習資源很多,都是寶藏,差的就是你有沒有毅力去發掘去學習。還有一點就是如果你程式基礎不夠,我有以下幾點建議:
- 演算法這堂課主要是你的思考如何解決問題的過程,程式碼不是最重要的,畢竟答案都查的到,程式碼只是實現想法的工具。
- 程式碼寫不出來參考別人沒關係,但是在看別人的解法前,我都會嘗試的自己去思考去寫,就算你的解法不是最好的,但至少你有自已的想法。
- 參考別人的程式不是複製貼上,而是去了解它為何會這樣寫,還要加上參考資料,這是對原創者的尊重。
最後,謝謝蔡芸琤老師
、賴建郡助教
、司福銘助教
陪我走完這學期,這學期我也學了蠻多的。也讓我更了解我現在正走的路是多麼艱辛且多變的。
- 基本功很重要,不要整天想飛。
- 試著去了解 DS、CS是在做甚麼。
- 知識永遠學不完,要懂得取捨。
- 學分不是修很多就厲害,知道你自己在在學甚麼才是最重要的。
- 中文的資料有限,找尋英文資料,不去排斥英文,你會有驚喜。
- 每天給自己固定的時間學習。
- 要記得你是最棒的~