《資料結構與演算法》推薦課程

昨天晚上找資料時,看到的 《資料結構與演算法》Data Structures & Algorithms (以下簡稱 DSA)課程,覺得很不錯,已經買了 Python 那堂。

如何選擇線上課程,之前詳細說明過,請參考:10分鐘學會挑選最熱門的線上課程

今天 udemy 特價,以下課程全部都是 NTD$330元。

利益宣告:本文沒有從任何一方獲得任何利益。


課程資訊

Python Data Structures & Algorithms + 93 CODING EXERCISES
類別:Development > Programming Languages > Data Structures ║ 內容:8 hours ║ 原價:NT$2,190
建立:2021-07-30 ║ 更新:2023-04-12 ║ 註冊:23,766人 ║ 語言:English ║ 字幕:有 ║ 評分:4.73 (4,236人)

Java Data Structures & Algorithms + 76 CODING EXERCISES
類別:Development > Software Engineering > Java Algorithms ║ 內容:8.5 hours ║ 原價:NT$1,990
建立:2021-12-19 ║ 更新:2023-04-09 ║ 註冊:10,132人 ║ 語言:English ║ 字幕:有 ║ 評分:4.70 (1,523人)

JavaScript Data Structures & Algorithms
類別:Development > Software Engineering > Data Structures ║ 內容:7 hours ║ 原價:NT$2,190
建立:2021-02-22 ║ 更新:2023-03-26 ║ 註冊:8,367人 ║ 語言:English ║ 字幕:有 ║ 評分:4.79 (1,396人)

C++ Data Structures & Algorithms
類別:Development > Software Engineering > C++ ║ 內容:7.5 hours ║ 原價:NT$1,990
建立:2022-08-22 ║ 更新:2023-03-27 ║ 註冊:1,633人 ║ 語言:English ║ 字幕:有 ║ 評分:4.76 (212人)

The Coding Interview Bootcamp: Algorithms + Data Structures
類別:Development > Web Development > Coding Interview ║ 內容:13 hours ║ 原價:NT$1,990
建立:2017-11-14 ║ 更新:2023-03-31 ║ 註冊:94,653人 ║ 語言:English ║ 字幕:有 ║ 評分:4.79 (14,065人)

新增 Howard 兄推薦 DSA 課程:

Mastering Data Structures & Algorithms using C and C++
類別:Development > Software Engineering > Data Structures ║ 內容:58.5 hours ║ 原價:NT$1,990
建立:2019-01-21 ║ 更新:2022-10-18 ║ 註冊:146,882人 ║ 語言:English ║ 字幕:有 ║ 評分:4.60 (37,338人)


課程介紹

前四堂課,是同一講師 Scott Barrett 的課程。

建議大家從你感興趣的程式語言(Python, Java, JavaScript & C++),預覽老師課程介紹的第一則影片,再做決定。

簡單的說,課程的安排是:

  1. 介紹 Big O & 類別與指標(影片中會說明為什麼)。

  2. 各種演算法和練習題(每個講座可下載 py 檔,練習和解答各一)。

  3. 如果你不喜歡 2 的下載 py 檔方式,也直接在瀏覽器中寫程式,使用的是 udemy 的線上編輯器(如下圖)。不過並不像影本最後所說,集中在最後一堂,而是分散在各節。

合理推測,講師是用同樣的思維來設計這系列課程,然後分別針對各程式語言錄製影片。

最吸引我的地方,是 講師用圖像的方式來說明演算法,對我這種圖像式思考的人很有幫助。

因為最近有點忙,以下有請 ChatGPT 幫忙介紹。


為什麼要學 DSA?

  1. 優化代碼:瞭解資料結構和演算法可以幫助你更有效率地解決問題。它可以幫助你設計出更快,更有效率的代碼。

  2. 提高性能:了解如何實現複雜的資料結構和演算法可以提高應用程序的性能。這對於需要高效處理大量數據的應用程序尤其重要。

  3. 提高思考能力:學習資料結構和演算法可以訓練你解決複雜問題的思考方式。這些技能對於解決現實世界的問題非常有用。

  4. 增強面試能力:資料結構和演算法是許多技術面試中常問到的主題。掌握這些技能可以增加你在面試中的競爭力。


如何學習

  1. 了解基礎概念:學習任何新主題之前,建議先學習該主題的基礎概念。學習資料結構和演算法的定義、種類和用途。

  2. 閱讀相關書籍或教學材料:建議讀取相關的書籍或教學材料,以便更深入地理解資料結構和演算法的概念和用法。例如,可以閱讀《演算法》(Algorithm Design)等書籍,或者觀看相關的線上課程和教學影片。

  3. 程式實作:學習後最好進行程式實作,將理論知識轉化為實際應用。可以嘗試使用所學的資料結構和演算法來解決問題,或者練習相關的程式題目。

  4. 專案實作:進行一些小型或中型的專案,可以幫助你更好地理解資料結構和演算法的應用。例如,可以使用資料結構和演算法來優化應用程序的性能,或者應用於網路爬蟲和數據挖掘等領域。


一起還是分別學習?

資料結構和演算法是密切相關的主題,建議一起學習。資料結構是有組織的資料集,可以用於儲存和操作數據,而演算法是用於解決特定問題或執行特定任務的程序或方法。資料結構和演算法通常是一起使用,以實現較高效率和優化的解決方案。

例如,對於搜索和排序操作,資料結構和演算法都扮演重要角色。在搜尋操作中,選擇合適的資料結構可以幫助快速搜尋目標,而適當的搜索演算法可以提高搜索效率。在排序操作中,使用不同的資料結構和排序演算法可以影響排序速度和效率。


學習管道

  1. 大學:大學課程可能是學習資料結構和演算法的最傳統和經典的途徑。大學課程通常會提供系統性的課程教學,從基礎的資料結構和演算法開始,並逐步深入。

  2. 看書:書籍是另一種傳統的學習途徑,許多經典的資料結構和演算法書籍都可以在圖書館或網上找到。書籍可以提供有系統的知識和實踐範例,可以隨時翻閱,方便學習和複習。

  3. YouTube:許多資料結構和演算法的相關課程和教學影片,可以在 YouTube 上找到生動和有趣的示範,幫助學生更好地理解和學習資料結構和演算法。

  4. Khan Academy:Khan Academy 是一個免費的線上學習平台,提供了許多數學、計算機科學和其他學科的課程。它的計算機科學課程包括許多資料結構和演算法的主題,非常適合初學者。

  5. edX:edX 是一個由哈佛大學和麻省理工學院共同創建的免費線上學習平台,提供了許多高品質的課程和認證。edX 的計算機科學課程包括許多資料結構和演算法的主題,非常適合那些希望深入學習的學生。

  6. Coursera:Coursera 是一個線上學習平台,提供了許多免費和付費的課程,由世界各地的大學和教育機構提供。Coursera 的計算機科學課程也包括許多資料結構和演算法的主題。

  7. Udemy:Udemy 是一個線上學習平台,提供了許多資料結構和演算法相關的課程。這些課程由專業教師授課,具有高品質的視頻和材料,並且可以隨時隨地進行學習。

  8. LeetCode:LeetCode 是一個線上刷題網站,提供了許多資料結構和演算法的編程練習題目。它的題庫包括從基礎到高級的題目,可以幫助學生在練習中學習資料結構和演算法。

這些學習途徑都可以提供不同程度的學習資源和練習機會,讓學生可以更好地學習和掌握資料結構和演算法。學生可以根據自己的學習需求和偏好,在這些管道中選擇適合自己的途徑進行學習。


然後我請 ChatGPT 寫一段程式碼,將一副撲克牌重新洗牌,以不同的演算法示範速度差異。(原始程式,一行未改)

import time
import random

# Fisher-Yates 洗牌算法
def fisher_yates_shuffle(deck):
    n = len(deck)
    for i in range(n):
        j = random.randint(i, n-1)
        deck[i], deck[j] = deck[j], deck[i]
    return deck

# Brute Force 暴力洗牌算法
def brute_force_shuffle(deck):
    n = len(deck)
    for i in range(n):
        j = random.randint(0, n-1)
        deck[i], deck[j] = deck[j], deck[i]
    return deck

# 洗牌次數
N = 1000000

# 撲克牌張數
cards = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
suits = ['C', 'D', 'H', 'S']
deck = [card + suit for card in cards for suit in suits]

# Fisher-Yates 算法
start_time = time.time()

for i in range(N):
    shuffled_deck = fisher_yates_shuffle(deck)

end_time = time.time()
print("Fisher-Yates 算法執行時間:", end_time - start_time)

# Brute Force 暴力洗牌算法
start_time = time.time()

for i in range(N):
    shuffled_deck = brute_force_shuffle(deck)

end_time = time.time()
print("暴力洗牌算法執行時間:", end_time - start_time)

1個讚