2.8.12 - Binomial Heap

1. Binomial Tree

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

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

圖示:

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

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

2. Binomial Heap

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

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

  2. 若Data數為 2k12^{k}-1 ,則Binomial Heap有 kk 棵Binomial Tree

n=2k1=(111....111)2, k=log2(n+1)n = 2^k-1=(111....111)_2,\ k=\log_2(n+1)

3. 運作

3.1 Merge(H1, H2)

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

最有有 log2(n+1)\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)。

Last updated