PFDS 7.4
- 13. データ構造
add の度に 各 segment の
先頭 schedule から 2 つ取り除く
先頭 schedule が nil なら 次の schedule へ
- 38. 計算量
1 回の add で merge 部分は、
最大で log n 個作られる
1個作るのにかかるのは O(1)
全部で O(log n)
- 39. 計算量
1 回の add での exec によって、merge は
セグメントそれぞれ最大2つずつ進む
サイズ n への add の merge 部分の計算は、
最大で 2 * log2 n → O(log n)
↑ セグメントの数 (最大)
- 41. 計算量
n schedule 内の要素数
0 0
1 0
2 0
3 0
4 4
5 2
6 0
7 0
8 12
9 10
- 42. 計算量
Lemma 7.2
サイズ n の sortable が持っている、
サイズ m のセグメントの持つ要素数は、
多くとも
2 m - 2 (n mod m + 1)
- 43. 計算量
サイズ n の sortable が持っている、
セグメント内の要素数は、多くとも
i
2n - 2 i Σ0 b i (n mod 2 - 1)
=
- 44. potential
i
ψ(n) = 2n - 2 i Σ0 b i (n mod 2 - 1)
=
0 ≦ ψ(n) ≦ 2n
- 45. potential
b の項
n 2n 0 1 2 3 ψ(n)
0 0 + = 0
1 2 + -2 = 0
2 4 + -2 = 2
3 6 + -2 -4 = 0
4 8 + -2 = 6
5 10 + -2 -4 = 4
6 12 + -2 -6 = 4
7 14 + -2 -4 -8 = 0
8 16 + -2 = 14
9 18 + -2 -4 = 12
10 20 + -2 -6 = 12
- 46. 比較
n schedule 内の要素数 ψ(n) 2n
0 0 0 0
1 0 0 2
2 0 2 4
3 0 0 6
4 4 ≦ 6 ≦ 8
5 2 4 10
6 0 4 12
7 0 0 14
8 12 14 16
9 10 12 18
- 48. 計算量
add sort
O(n)
最悪 O(n)
→ O(log n)
ならし O(log n) O(n)