# 2.8.12 - Binomial Heap

### 1. Binomial Tree

1. $$B\_{0}$$: 高度為0的Binomial Tree，只有Root一點。
2. $$B\_{k}$$: 高度為k的Binomial Tree，是由兩棵高度為k-1的 $$B\_{k-1}$$所組成。

圖示:

![](https://2769815795-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LGckN3OAfinKuVIrkMj%2F-LI-zwMeeJFfa-hBYphz%2F-LI015QHnhkEPgXJKZe3%2F%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7%202018-07-22%2016.08.21.jpg?alt=media\&token=fafde2fc-a1c8-4ca0-ba9f-702f982181ae)

1. $$B\_{k}$$中第$$i$$個level的節點數為 $${ k\choose i}$$&#x20;
2. $$B\_{k}$$中第節點總數為 $${ k\choose 0}+{ k\choose 1}+...+{ k\choose k}=2^k$$&#x20;

### 2. Binomial Heap

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

1. 若Data數為 $$2^{k}$$ ，則Binomial Heap只有一棵Binomial Tree
2. 若Data數為 $$2^{k}-1$$ ，則Binomial Heap有 $$k$$ 棵Binomial Tree

$$n = 2^k-1=(111....111)\_2,\ k=\log\_2(n+1)$$&#x20;

### 3. 運作

#### 3.1 Merge(H1, H2)

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

最有有 $$\log\_{2}(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)。
