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. Binomial Tree
  • 2. Binomial Heap
  • 3. 運作
  1. 2 - Tree & Binary Tree
  2. 2.8 Advanced Trees

2.8.12 - Binomial Heap

Previous2.8.11 - Leftest HeapNext3 - Search & Sort

Last updated 6 years ago

1. Binomial Tree

  1. B0B_{0}B0​: 高度為0的Binomial Tree,只有Root一點。

  2. BkB_{k}Bk​: 高度為k的Binomial Tree,是由兩棵高度為k-1的 Bk−1B_{k-1}Bk−1​所組成。

圖示:

  1. BkB_{k}Bk​中第iii個level的節點數為 (ki){ k\choose i}(ik​)

  2. BkB_{k}Bk​中第節點總數為 (k0)+(k1)+...+(kk)=2k{ k\choose 0}+{ k\choose 1}+...+{ k\choose k}=2^k(0k​)+(1k​)+...+(kk​)=2k

2. Binomial Heap

Binomial Heap是由一組Binomial Tree所組成的Forest,且每一棵Binomial Tree必須是min-tree。(子點 ≥ 父點)

  1. 若Data數為 2k2^{k}2k ,則Binomial Heap只有一棵Binomial Tree

  2. 若Data數為 2k−12^{k}-12k−1 ,則Binomial Heap有 kkk 棵Binomial Tree

n=2k−1=(111....111)2, k=log⁡2(n+1)n = 2^k-1=(111....111)_2,\ k=\log_2(n+1)n=2k−1=(111....111)2​, k=log2​(n+1)

3. 運作

3.1 Merge(H1, H2)

在H1, H2中,合併具有相同高度的Binomial Trees,較小的Root當成新的Root,另一棵為其子樹,合併順序無所謂,直到H1, H2中沒有相同高度的Binomial Trees。

最有有 log⁡2(n+1)\log_{2}(n+1)log2​(n+1)棵Binomial Trees要合併,時間複雜度為O(logn)。

3.2 Delete min in an Binomial Heap

  1. 找到具有最小值Root的Binomial Tree, T,其餘Trees的集合為H2

  2. 從T的Root取出最小值,T剩下的子樹為H1

  3. Merge(H1, H2)

3.3 Insert x in an Binomial Heap

  1. x自己成為一個Binomial Heap, H2

  2. Merge(H1, H2)

時間複雜度: 大部分為O(1),當Binomial Heap merge之後會變成只有一棵Binomial Tree的時候為O(logn)。