Weitere ähnliche Inhalte Mehr von Tetsuro Nagae (7) Kürzlich hochgeladen (12) purely functional data structures 5.3 日本語での説明1. 償却について
Banker's method
クレジットはデータ構造の中のロケーションに結び付けられる。
Ai = Ti + Ci – Ci
Ai : 蓄積された償却コスト
Ti : 蓄積された実際のコスト
Ci : 操作 i によって置かれたクレジットの数
Ci : 操作 i によって消費されたクレジット
クレジットは消費される前に置かれる。クレジットは1回しか使えない。
banker's methodはクレジット不変則を定義する。
クレジット不変則とは:
高価(expensive)な操作が発生するときにはいつも充分な
クレジットが正しいロケーションに置かれている。
クレジットの増加 == 計算量の貯金が増える
クレジット(信用)がないとお金を貸さないからbanker(銀行家)?
4. binomial heapのinsertは償却されたらO(1)になる
・1 physicist's methodの場合
ポテンシャルをbinomial heapの中の木の数と定義します。
insert は (k+1)ステップかかります。 (k はlinkを呼ぶ回数)
t個のtreeがbinomial heapにもともと存在する場合、
insert後には t-k+1個の木があることになります。
ポテンシャルの差異は (t-k+1) - t = 1-k なので、
償却されたコストは (k+1) + (1-k) = 2 になります。
rank 4 3 2 1 0
tree 1 0 1 1 1 (1: 木が存在する。0: 木が存在しない)
↓ insert (rank 0の木を1個追加する)
tree 1 1 0 0 0
この場合k=3
5. binomial heapのinsertは償却されたらO(1)になる
・2 banker's methodの場合 (Exercise 5.2)
ヒープの中の木1個ごとにクレジット1を割当てます。
insert は (k+1)ステップかかります。 (k はlinkを呼ぶ回数)
t個のtreeがbinomial heapにもともと存在する場合、
insert後には t-k+1個の木があることになります。
クレジットの変化分は (t-k+1) - t = 1-k なので、
償却されたコストは (k+1) + (1-k) = 2 になります。
(physicist's method とほぼ同一の説明です)
6. Exercise 5.3 (1)
binomial heapのmergeは償却されてもO(logn)になることを示す。
ポテンシャルをbinomial heapの中の木の数と定義します。
a = t + Σd∈Out Φ(d) + Σd∈In Φ(d)
mergeの実行において、consはlogn回、linkはk回呼ばれます。
そのとき、ポテンシャルの変化は -k となります。
(merge前のヒープのポテンシャルをそれぞれΦ1, Φ2とすると、
merge後のヒープのポテンシャルは Φ1+Φ2-k)
合計して logn + k - k = logn となります。よって償却してもO(logn)
rank 4 3 2 1 0
tree 1 0 1 0 1
+ (merge)
tree 0 0 0 1 1
↓
tree 1 1 0 0 0
⇒ この例ではlinkは3回発生します。ポテンシャルの変化は-3 (=-k)です
7. Exercise 5.3 (2)
binomial heapのdeleteMinは償却されてもO(logn)になることを示す。
ポテンシャルをbinomial heapの中の木の数と定義します。
(i) heapにrank 1の木がある場合
rank 4 3 2 1 0
tree 1 0 1 0 1
↓ deleteMin
tree 1 0 1 0 0
⇒ この例ではポテンシャルの変化 = -1
(ii) heapにrank 0の木がない場合
rank 4 3 2 1 0
tree 1 0 0 0 0
↓ deleteMin
tree 0 1 1 1 1
⇒ この例ではポテンシャルの変化 = 3
つまり、deleteMinによるポテンシャルの変化 = a (-1≦a<logn -1 の整数)
8. Exercise 5.3 (2) binomial heapのdeleteMinの続き
deleteMinの中でそれぞれの木で最小のrootを見つけるのに αlogn ステップか
また、木からrootを取り去ってそれをマージするのに βlogn ステップかかる。
deleteMinの前後でポテンシャルの変化は a (-1≦a<logn -1 ) となる。
合計して αlogn + βlogn + a (-1≦a<logn -1 )
よって償却しても O(logn)