Skip to content

Data Structure and Algorithm

Data Structure 資料結構

資料結構是電腦中儲存和組織資料的方式,一個精心設計的資料結構可以帶來更高的執行效率和更簡潔的程式碼。

基本資料結構類型

  1. 原始資料型別

    • 整數(Integer)
    • 浮點數(Float)
    • 字元(Character)
    • 布林值(Boolean)
  2. 線性資料結構

    • 陣列(Array)
      • 固定大小
      • 連續記憶體空間
    • 串列(Linked List)
      • 動態大小
      • 非連續記憶體空間
    • 堆疊(Stack)
      • 後進先出(LIFO)
      • 常用於函式呼叫
    • 佇列(Queue)
      • 先進先出(FIFO)
      • 常用於任務排程
  3. 非線性資料結構

    • 樹(Tree)
      • 二元樹
      • 平衡樹
      • B樹
    • 圖(Graph)
      • 有向圖
      • 無向圖
      • 加權圖
    • 雜湊表(Hash Table)
      • 鍵值對儲存
      • 快速查詢

選擇資料結構的考量因素

  1. 時間複雜度

    • 存取(Access)
    • 搜尋(Search)
    • 插入(Insert)
    • 刪除(Delete)
  2. 空間複雜度

    • 記憶體使用量
    • 記憶體使用效率
  3. 實際應用需求

    • 資料量大小
    • 操作頻率
    • 資料特性

常見應用場景

  1. 陣列

    • 固定大小的資料集合
    • 需要快速隨機存取
  2. 串列

    • 頻繁的插入和刪除操作
    • 動態變化的資料集合
  3. 堆疊

    • 編譯器的運算式求值
    • 瀏覽器的上一頁/下一頁
  4. 佇列

    • 作業系統的工作排程
    • 網路封包的處理
    • 檔案系統的目錄結構
    • 資料庫的索引
    • 社交網路的關係
    • 地圖導航系統
  5. 雜湊表

    • 快取系統
    • 資料庫的快速查詢

Algorithm 演算法

演算法是一個明確定義的、用於解決特定問題的步驟序列。它必須是有限的、明確的,並且能在有限時間內得到結果。

演算法的基本特性

  1. 有限性(Finiteness)

    • 演算法必須在有限步驟內完成
    • 不能無限執行
  2. 明確性(Definiteness)

    • 每個步驟都必須明確且不含糊
    • 不同人執行相同演算法應得到相同結果
  3. 輸入(Input)

    • 演算法可以有零個或多個輸入
    • 輸入數據需符合特定規範
  4. 輸出(Output)

    • 演算法必須產生至少一個輸出結果
    • 輸出結果與輸入有明確關係
  5. 有效性(Effectiveness)

    • 每個步驟都必須是可行的
    • 使用基本運算能夠完成

演算法的表示方式

  1. 自然語言

    • 使用日常語言描述步驟
    • 適合初步構思和溝通
  2. 流程圖

    • 使用圖形化方式表示
    • 直觀且易於理解
  3. 虛擬碼(Pseudocode)

    • 類似程式碼但不依賴特定語言
    • 結構化且易於轉換為實際程式碼
  4. 程式碼

    • 使用特定程式語言實現
    • 可直接執行

為什麼需要學習演算法

  1. 提升解決問題的能力

    • 培養邏輯思維
    • 學習系統化解決問題
  2. 優化程式效能

    • 理解不同解決方案的優劣
    • 選擇最適合的實現方式
  3. 應對複雜問題

    • 處理大規模數據
    • 解決實際工作中的挑戰
  4. 程式設計的基礎

    • 理解程式運作原理
    • 提升程式碼品質