Data Structure
  • 資料結構自學筆記
  • 1 - Stack & Queue
    • 1.1 - Stack
    • 1.2 - Queue
    • 1.3 - Stack and Queue
  • 2 - Tree & Binary Tree
    • 2.1 - Tree
    • 2.2 - Binary Tree
    • 2.3 - Binary Tree Traversal
    • 2.4 - Binary Search Tree
    • 2.5 - Heap
    • 2.6 - Thread Binary Tree
    • 2.7 - Tree and Binary Tree Conversion
    • 2.8 Advanced Trees
      • 2.8.1 - Min-Max Heap
      • 2.8.2 - Deap
      • 2.8.3 - Symmetric Min-Max Heap
      • 2.8.4 - Extended Binary Tree
      • 2.8.5 - AVL Tree
      • 2.8.6 - M-Way Search Tree
      • 2.8.7 - B Tree
      • 2.8.8 - Red-Black Tree
      • 2.8.9 - Optimal Binary Search Tree
      • 2.8.10 - Splay Tree
      • 2.8.11 - Leftest Heap
      • 2.8.12 - Binomial Heap
  • 3 - Search & Sort
    • 3.1 - Searching
    • 3.2 - Elementary Sorting
      • 3.2.1 - Insertion Sort
      • 3.2.2 - Selection Sort
      • 3.2.3 - Bubble Sort
      • 3.2.4 - Shell Sort
    • 3.3 - Sophisticated Sorting
      • 3.3.1 - Quick Sort
      • 3.3.2 - Merge Sort
      • 3.3.3 - Heap Sort
      • 3.3.4 - Radix Sort
      • 3.3.5 - Bucket Sort
      • 3.3.6 - Counting Sort
    • 3.4 - Summary
  • 4 - Graph
    • 4.1 - Intro
    • 4.2 - Graph Traversal
    • 4.3 - Spanning Tree
      • 4.3.1 - Kruskal's algorithm
      • 4.3.2 - Prim's algorithm
      • 4.3.3 - Sollin's algorithm
    • 4.4 - Shortest Path Length
      • 4.4.1 - Dijkstra's algorithm
      • 4.4.2 - Bellman-Ford algorithm
      • 4.4.3 - Floyd-Warshall algorithm
    • 4.5 - AOV Network
    • 4.6 - AOE Network
    • 4.7 - Others
Powered by GitBook
On this page
  1. 4 - Graph
  2. 4.3 - Spanning Tree

4.3.1 - Kruskal's algorithm

Previous4.3 - Spanning TreeNext4.3.2 - Prim's algorithm

Last updated 6 years ago

G=(V,E)G=(V, E)G=(V,E)

Steps:

  1. 自 EEE 中挑出最小成本的邊 (u,v)(u, v)(u,v)

    ⇒\Rightarrow⇒使用Heap的Delete-Min(),花 O(logE)O(logE)O(logE)

  2. 判斷(u,v)(u, v)(u,v) 加入spanning tree中,是否會形成cycle

    1. 是: 放棄

    2. 否: 將(u, v)加入S中

    ⇒\Rightarrow⇒使用Disjoint Set(互斥集)來判斷是否會產生cycle

    if (find(u) != find(v){ //判斷u, v是否屬於同一個集合

    ​union(u, v); //將u, v聯集加入S中

    }

  3. 重複1~2直到已挑出v−1v-1v−1 個邊或是E為空

若 SSS的邊數小於v−1v-1v−1 ,則 GGG 無spanning tree。

Time: O(ElogE)O(ElogE)O(ElogE)

e.g.

  1. 挑出(1, 6)

  2. 挑出(3, 4)

  3. 挑出(2, 7)

  4. 挑出(2, 3)

  5. 挑出(4, 7)會形成cycle

  6. 挑出(4, 5)

  7. 挑出(5, 7)會形成cycle

  8. 挑出(5, 6)

Min Cost = 99