2.5 ヒープ

2.5 ヒープ
ヒープとは
この部分木で一番
大きい値は根の14
16
この部分木で一番
大きい値は根の10
14
10
11
4
9
2
6
3
8
どの部分木でもその中で
一番大きい値は根にある
ヒープとは
1
h[i]⇔v
2
3 16
h[2i]⇔vの左の子
4
5
6
7 h[2i+1]⇔vの右の子
14
10
8
9 10
1 112 3 4 95
16 14 10 11 9
4
2
6
6
3
73
8
8
4
98 10
2 6
ヒープの再構成
16
14
10
11
4
9
2
6
3
8
ヒープの再構成
ヒープが壊れる
16 最大要素を取り出す
14
10
11
4
9
2
6
3
8
ヒープの再構成
6
14
10
11
4
9
2
6
3
8
一番端のデータを
トップに移動
ヒープの再構成
部下の強い方と
ポジションを争う
6
14
11
4
10
9
2
3
8
ヒープの再構成
負けたので降格
6
14
11
4
10
9
2
3
8
ヒープの再構成
部下の強い方と
ポジションを争う
14
6
11
4
10
9
2
3
8
ヒープの再構成
負けたので降格
14
6
11
4
10
9
2
3
8
ヒープの再構成
部下の強い方と
ポジションを争う
14
11
6
4
10
9
2
3
8
ヒープの再構成
勝ったので、そこが
実力通りのポジション
14
11
6
4
10
9
2
3
8
ヒープが完成したので
再構成終了
P32のdownheapの動き
16
6
getheap h[1]:=h[n]
14
10
11
4
9
2
6
3
8
一番端のデータを
トップに移動
P32のdownheapの動き
v
6
6
h[k]
14
11
4
10
9
2
3
8
根にあるデータを
変数vに保存
P32のdownheapの動き
v
6
h[k]
14 h[i]
11
4
9
2
10 h[i+1]
3
8
強い方と比較
P32のdownheapの動き
v
6
h[k]
14 h[i]
11
4
9
2
10 h[i+1]
3
8
部下が勝ったので
部下を上に上げる
P32のdownheapの動き
v
6
14
10
h[k]
11
4
h[i]
2
9
3
8
h[i+1]
強い方と比較
P32のdownheapの動き
v
6
14
10
h[k]
11
4
h[i]
2
9
3
8
h[i+1]
部下が勝ったので
部下を上に上げる
P32のdownheapの動き
v
6
14
11
h[k]
4
h[i]
2
h[i+1]
10
9
3
8
強い方と比較
P32のdownheapの動き
v
6
finish
14
11
h[k]
4
h[i]
2
h[i+1]
10
9
3
8
勝ったので
ポジションに入る
P33のupheapの動き
16
upheap h[n]:=13
10
11
9
6
4
2
13
3
8
一番最後に13を追加
P33のupheapの動き
v
13
16
10
11
9
6
4
2
13
3
8
一番最後のデータを
変数vに保存
P33のupheapの動き
v
13
16
10
11
9 h[i] 3
6
4
2
上司と比較
8
P33のupheapの動き
v
13
16
10
11
9
6
4
2
3
8
上司が負けたので
上司を下げる
P33のupheapの動き
v
13
16
10
11 h[i]
3
6
4
2
9
上司と比較
8
P33のupheapの動き
v
13
16
10
11
3
6
4
2
9
8
上司が負けたので
上司を下げる
P33のupheapの動き
v
13
16 h[i]
10
11
6
4
2
9
3
上司と比較
8
P33のupheapの動き
v
13
16
10
finish
11
6
4
2
9
3
8
負けたので
ポジションに入る
downheapとupheapの時間計算量
• それぞれの計算量は何に依存するか?
• 教科書のP33を参考にせよ
2.6 集合の表現と演算
集合の基本演算
• データを集合とみなす
⇒ データの操作 ⇔ 集合の演算
• 基本演算
リスト
–
–
–
–
–
menber(x,S)
search
O(|S|)
adjoin(x,S)
search + insert
O(|S|)
remove(x,S)
search + delete
O(|S|)
union(S1,S2)
O(|S1|・ |S2|)
intersection(S1,S2)
O(|S1|・ |S2|)
ビットベクトル
• 第i要素の有無で、i番目のビットが1,0
第1要素
第3要素
第5要素
第7要素
第2要素
第4要素
第6要素
第8要素
集合A
1
1
0
1
∩ /∪
集合B
0
1
1
1
2
4
6
8
集合A
0
1
0
1
0
1
and /or
0
1
1
2
3
6
5
8
集合B