計算量の例
8
- 例)
- a
n+2
= a
n+1
+ a
n
,
a
1
= 1,
a
2
= 1
- このとき、a
40
, a
100
を求めよ
- いわゆるフィボナッチ数列
Slide 9
Slide 9 text
計算量の例
9
- ナイーブな実装
Slide 10
Slide 10 text
計算量の例
10
- ナイーブな実装
- a
100
が計算できない
- 計算時間
- a
40
: 604 ms
- a
45
: 6,808 ms
- a
50
: > 1 min
Slide 11
Slide 11 text
計算量の例
11
- 改善点
- a
50
= a
49
+ a
48
= (a
48
+ a
47
) + (a
47
+ a
46
)
= (a
47
+ a
46
) + (a
46
+ a
45
) + (a
46
+ a
45
) + (a
45
+ a
44
)
= …
Slide 12
Slide 12 text
計算量の例
12
- 改善点
- a
50
= a
49
+ a
48
= (a
48
+ a
47
) + (a
47
+ a
46
)
= (a
47
+ a
46
) + (a
46
+ a
45
) + (a
46
+ a
45
) + (a
45
+ a
44
)
= …
- 重複した計算を上手く記憶しておくことで速くできそう
Slide 13
Slide 13 text
計算量の例
13
- 途中計算を記憶しておく実装
Slide 14
Slide 14 text
計算量の例
14
- 途中計算を記憶しておく実装
- 計算時間
- a
40
: ≒ 1ms
- a
100
: ≒ 1ms
- ちなみにこういうアルゴリズムを総称して動的計画法(DP)という