/SCU-class_DSA-2019

algorithms & data-structures Learning Note | 2019_三上_資料結構與演算法課程紀錄

Primary LanguageJupyter Notebook

My algorithms & data-structures Learning Note

歡迎來到 何彥南資料結構與演算法(2019-三下) 學習筆記

Contents

  1. 不可不知道的事
  2. About me
  3. 學習資源 >> 重要!!
  4. 課堂筆記
  5. 課堂作業
  6. 課外學習
  7. 課程心得

不可不知道的事

這些專有名詞很重要,在學習這堂課前可以先去查查看,還有提醒一下,請不要只查中文,英文的資源更豐富。 下面我租略介紹一下關於資料結構與演算法的基本觀念...

1. 資料結構 (data structure)

在電腦科學中,資料結構是電腦中儲存、組織資料的方式,資料的組織與架構會大大影響資料處理效能,這也是我們學習資料結構的重點所在。

  • 常見的資料結構
    • 堆疊(Stack)
    • 佇列(Queue)
    • 陣列(Array)
    • 連結串列(Linked List)
    • 樹(Tree)
    • 圖(Graph)
    • 堆積(Heap)
    • 雜湊表(Hash table)

2. 演算法 (algorithms)

我的想法是演算法起源於問題,因為有問題需要透過電腦去解決,所以人們就會定義一個步驟和邏輯達到目的,這就是演算法。許多演算法都是透過某個資料結構為基礎去產生的,針對不同問題會有不同的演算法,但是資料結構是相通的,所以資料結構很重要一好好學。針對同個問題也會有不同的演算法,一般來說新的演算法通常是最出色的,但是在同個問題不同情境下,各演算法的表現又會不一樣。這就要你們去慢慢理解了。

這邊有更詳細的解釋 >> 初學者學演算法|談什麼是演算法和時間複雜度-medium

3. 時間複雜度 (Time complexity)

一個程式的時間複雜度是指完全地執行程式所需的計算機時間。時間複雜度是比較演算法好不好的一個標準,使用時間會隨著資料量變多而增加。這邊我簡單的說一下它的概念,時間複雜度 O(n) 表示,它是趨近於無限的狀況做比較。O(n) 代表說我花的時間與資料量是 1:1 的,而 n^2 代表花的時間是資料量的平方倍。

4. 空間複雜度 (Space complexity)

空間複雜度的意思就是你的演算法在處理問題的整過程,最大需要儲存多少暫存。假如說我今天進來的是長度為 n 的 list,而我從頭到尾都只用這個 list 做處理,空間複雜度就是 n ,也稱作 原地演算法-In-place algorithm。如果用了額外的 list (長度為n) 去存取,就是 2n。


About me

我是一個天真、可愛、善良的大學生~

何彥南

  • 就讀於: Soochow University (東吳大學)
  • 主修: 巨量資料管理學系
  • 生日: 1998/11/26
  • 星座: 射手座
  • 興趣: 打羽球
  • 綽號: 荷花、熊、187
  • 擅長程式: python

學習資源

1. 英文資源

python 教學

演算法教學

演算法範例程式碼

課程資源


2. 中文資源

演算法教學

Markdown 語法在 github 上

課堂筆記

week 1

week 2

week 3

week 4

week 5

week 6

week 7

week 8

week 9

week 10

week 11

week 12

week 13

week 14

week 15

week 16

  • 課程回顧

Week 17

課堂作業

課外學習

leetcode

CS50

課程心得

資料結構與演算法這堂課在我們巨量資料的領域是不可或缺的知識,剛開始的時候其實我也蠻排斥蔡老師的授課方式,尤其是作業方面,老實說蠻花時間的。但是慢慢的發現原來在這堂課下,我慢慢建立起了自己的自學模式,這對我來說是一個收穫。我也發現了其實網路上的學習資源很多,都是寶藏,差的就是你有沒有毅力去發掘去學習。還有一點就是如果你程式基礎不夠,我有以下幾點建議:

  • 演算法這堂課主要是你的思考如何解決問題的過程,程式碼不是最重要的,畢竟答案都查的到,程式碼只是實現想法的工具。
  • 程式碼寫不出來參考別人沒關係,但是在看別人的解法前,我都會嘗試的自己去思考去寫,就算你的解法不是最好的,但至少你有自已的想法。
  • 參考別人的程式不是複製貼上,而是去了解它為何會這樣寫,還要加上參考資料,這是對原創者的尊重。

最後,謝謝蔡芸琤老師賴建郡助教司福銘助教陪我走完這學期,這學期我也學了蠻多的。也讓我更了解我現在正走的路是多麼艱辛且多變的。

希望大家也要更了解自己想要甚麼

  • 基本功很重要,不要整天想飛。
  • 試著去了解 DS、CS是在做甚麼。
  • 知識永遠學不完,要懂得取捨。
  • 學分不是修很多就厲害,知道你自己在在學甚麼才是最重要的。
  • 中文的資料有限,找尋英文資料,不去排斥英文,你會有驚喜。
  • 每天給自己固定的時間學習。
  • 要記得你是最棒的~