狠狠撸

狠狠撸Share a Scribd company logo
中学受験算数に見る
動的計画法
押川 令
はじめに
中学受験算数の問題を題材としていますが、これは中学生のみな
さんが前提知識なしですぐに理解できる問題として引用している
だけであり、中学数学を勉強していれば中学受験を経験している
必要はありません。
(ご経験のある方は懐かしい気持ちで聞いてください?)
コンピュータで問題を解く時に使う計算の仕方
「アルゴリズム」について勉強しましょう!
中学3年生までの算数?数学の知識を前提とすることがあります
階段の問題
問題
階段を1回につき2段上がるか3段
上がるかの
いづれかの方法で階段を上がる
とき、
①7段
②12段
の階段を上がる方法はそれぞれ
何通りありますか。
(久留米大付設中学2020年度算数)
1段目
2
3
4
5
6
階段の問題
解法1:樹形図
階段の登り方を全て試して、
目的の段数登れるような登り方
を数える
1段目
2
3
4
5
6
階段の問題:解法1
0
※数え忘れがあると困るので、
中学2年生「確率」で使う
「樹形図」を使って数えてみましょう
階段の問題:解法1
0 2
3
階段の問題:解法1
0 2
3
4
5
階段の問題:解法1
0 2
3
4
5
6
7
階段の問題:解法1
0 2
3
4
5
6
7
8
9
目的の段数を超えたので
これ以上調べなくても良い
(枝刈りとも言う)
階段の問題:解法1
0 2
3
4
5
6
7
8
9
目的の段数に到達したので
これ以上調べなくても良い
階段の問題:解法1
0 2
3
4
5
6
7
7
8
8
9
階段の問題:解法1
0 2
3
4
5
6
7
7
8
8
9
5
6
階段の問題:解法1
0 2
3
4
5
7
8
6
7
7
8
8
9
5
6
階段の問題:解法1
0 2
3
4
5
7
8
6
7
7
8
8
9
8
5
6
9
階段の問題:解法1
0 2
3
4
5
7
8
6
7
7
8
8
9
8
5
6
9
3通りが答え。
7 を数えて
階段の問題:解法1
0 2 4 56
7
7
8
8
9
10
12段のとき(最初に2段登った場合)
11
11
12
119
12
1210
13
12
13
13
14
13
14
13
14
119
12
1210
13
13
14
5
3
10
11
12
13
13
14
階段の問題:解法1
0 3 5 67
8
8
9
9
10
11
(とても めんどくさい)
12段のとき(最初に3段登った場合)
12
12
13
1210
13
1311
14
13
14
6
2
1210
13
1311
14
11
12
13
14
階段の問題:解法1
012段のとき
3 5 7
8
9
10
11
12
12
13
1210
13
1311
14
13
14
66 8
9
1210
13
1311
14
11
12
13
14
2 4 6
7
8
9
10
11
11
12
119
12
1210
13
12
13
13
14
13
14
13
14
5 7
8
119
12
1210
13
13
14
10
11
12
13
13
14
12通り
12 を数えると
階段の問題:解法1
012段のとき
3 5 7
8
9
10
11
12
12
13
1210
13
1311
14
13
14
66 8
9
1210
13
1311
14
11
12
13
14
2 4 6
7
8
9
10
11
11
12
119
12
1210
13
12
13
13
14
13
14
13
14
5 7
8
119
12
1210
13
13
14
10
11
12
13
13
14
12通り
12 を数えると
めんどくさい
階段の問題:解法1
何回調べないといけない?
=何個?を書かないといけない?
7段目まで…17回
12段目まで…73回
めんどくさい
→階段の段数が大きくなった時に調べられるか…?
階段の問題:解法1
何回調べないといけない?
N段目まで登る時について考える
N段目まで登る時、だいたいN/2回登る(2段か3段ずつなので)
一回登る操作をすると書かなければいけない?は2こふえる
=何個?を書かないといけない?
段数が2段増えるとだいたい2倍になってゆく…
階段の問題:解法1
何回調べないといけない?
段数 答え 調べる回数
7 3 17
12 12 73
50 525,456(52万) 3,236,383(323万)
100 670,976,837,021(6709億) 4,132,674,661,507(4兆)
200 1,094,081,998,015,776,5
26,179,329
6,738,660,265,660,308,8
07,737,463
600(東京タワー階段の段
数)
7,734,268,575,229,071,7
58,820,053,174,351,074,
065,809,240,913,542,350
,861,075,008,313,376,34
1,876
47,636,839,310,365,630,
340,208,491,560,681,036
,757,140,134,694,391,45
5,799,211,182,744,208,5
99,001
?
階段の問題:解法1
コンピュータは何回調べられる?
コンピュータは一秒に10,000,000(1億回)くらい調べられる
段数 調べる回数
50 3,236,383(323万)
100 4,132,674,661,507(4兆)
200 1,094,081,998,015,776,5
26,179,329
600(東京タワー階段の段
数)
47,636,839,310,365,630,
340,208,491,560,681,036
,757,140,134,694,391,45
5,799,211,182,744,208,5
99,001
←これは1秒で調べられる
←これは12時間かかる
←これは21億年かかる
※宇宙が誕生してから
138億年しか経っていない
階段の問題:解法1
0
3 5 7
8
9
10
11
12
12
13
1210
13
1311
14
13
14
66 8
9
1210
13
1311
14
11
12
13
14
2 4 6
7
8
9
10
11
11
12
119
12
1210
13
12
13
13
14
13
14
13
14
5 7
8
119
12
1210
13
13
14
10
11
12
13
13
14
とか の中身、
全く同じ…?
階段の問題:解法2
解法2:同じ場所にいる時…
1段目
2
3
4
5
6
7
8
9
10
11
12
?
同じ場所にいる時
(そこまでの登り方にかかわらず)
そのあとの登り方は同じ!
階段の問題:解法2
解法2:同じ場所にいる時…
同じ場所にいる時
(そこまでの登り方にかかわらず)
そのあとの登り方は同じ!
→12段目まで到達した回数を数えて
覚えておけば、もう一回使える!
1段目
2
3
4
5
6
7
8
9
10
11
12
?
階段の問題:解法2
←最初は普通に調べていく
0 2 4 6 8 10
11
12
13
13
14
2本の枝を調べ切った8,10,11段目について、
そこから12段目まで登る登り方の数がわかる
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11
12段目までの登り方 - - - - - - - - 1 - 1 0
7
95
3
階段の問題:解法2
0 2 4 6 8
9
10
11
11
12
13
13
14
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11
12段目までの登り方 - - - - - - - - 1 - 1 0
先を調べなくても、
この後12段目に登るための
登り方の個数がわかる!
0通り5
3
7
階段の問題:解法2
0 2 4 6 8
9
10
11
11
12
12
13
13
14
3
0通り
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11
12段目までの登り方 - - - - - - - - 1 1 1 0
5
7
階段の問題:解法2
0 2 4 6 8 10
11
12
13
13
14
3
5
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11
12段目までの登り方 - - - - - - 2 - 1 1 1 0
9 11
12
0通り
7
階段の問題:解法2
0 2 4 6
7
8 10
11
9
12
13
13
14
3
5
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11
12段目までの登り方 - - - - - - 2 - 1 1 1 0
9 11
12
0通り
10
階段の問題:解法2
0 2 4 6
7
8 10
11
9
12
13
13
14
3
5
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11
12段目までの登り方 - - - - - - 2 - 1 1 1 0
9 11
12
0通り
1通り
10 1通り
階段の問題:解法2
0 2 4 6
7
8 10
11
9
12
13
13
14
3
9 11
12
0通り
1通り
10 1通り
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11
12段目までの登り方 - - - - - - 2 2 1 1 1 0
5
階段の問題:解法2
0 2 4 6
7
8 10
11
9
12
13
13
14
3
9 11
12
0通り
1通り
10 1通り
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11
12段目までの登り方 - - - - 4 - 2 2 1 1 1 0
5
階段の問題:解法2
5 7
8
0 2 4 6
7
8 10
11
9
12
13
13
14
3
9 11
12
0通り
10
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11
12段目までの登り方 - - - - 4 - 2 2 1 1 1 0
1通り
1通り
1通り
2通り
階段の問題:解法2
5 7
8
0 2 4 6
7
8 10
11
9
12
13
13
14
3
9 11
12
0通り
10
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11
12段目までの登り方 - - - - 4 3 2 2 1 1 1 0
1通り
1通り
1通り
2通り
階段の問題:解法2
5 7
8
0 2 4 6
7
8 10
11
9
12
13
13
14
3
9 11
12
0通り
10
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11
12段目までの登り方 - - 7 - 4 3 2 2 1 1 1 0
1通り
1通り
1通り
2通り
階段の問題:解法2
5 7
8
0 2 4 6
7
8 10
11
9
12
13
13
14
3 9 11
12
0通り
10
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11
12段目までの登り方 - - 7 - 4 3 2 2 1 1 1 0
1通り
1通り
1通り
2通り
0 3 5
(最初に3段登った場合)
6
2
3通り
2通り
階段の問題:解法2
5 7
8
0 2 4 6
7
8 10
11
9
12
13
13
14
3 9 11
12
0通り
10
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11
12段目までの登り方 - - 7 5 4 3 3 2 1 1 1 0
1通り
1通り
1通り
2通り
0 3 5
(最初に3段登った場合)
6
2
3通り
2通り
階段の問題:解法2
5 7
8
0 2 4 6
7
8 10
11
9
12
13
13
14
3 9 11
12
0通り
10
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11
12段目までの登り方 12 - 7 5 4 3 3 2 1 1 1 0
1通り
1通り
1通り
2通り
0 3 5
6
2
3通り
2通り
階段の問題:解法2
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11
12段目までの登り方 12 - 7 5 4 3 3 2 1 1 1 0
0段目から12段目までの登り方
→これが答え(12通り)
階段の問題:解法2
何回調べないといけない?
=何個?を書かないといけない?
7段目まで…17回→13回
12段目まで…73回→23回
明らかに解法1よりは楽になった
階段の問題:解法2
何回調べないといけない?
N段目まで登る時について考える
N段目まで登る時、
一回登る操作をすると書かなければいけない?は2こふえる
=何個?を書かないといけない?
だいたい段数の2倍くらい調べる
階段の問題:解法2
何回調べないといけない?
N段目まで登る時について考える
N段目まで登る時、
一回登る操作をすると書かなければいけない?は2こふえる
=何個?を書かないといけない?
だいたい段数の2倍くらい調べる
階段の問題:解法2
何回調べないといけない?
段数 解法1で調べる回数 解法2で調べる回数
7 17 13
12 73 23
50 3,236,383(323万) 99
100 4,132,674,661,507(4兆) 199
200 6,738,660,265,660,308,8
07,737,463
399
600(東京タワー階段の段
数)
47,636,839,310,365,630,
340,208,491,560,681,036
,757,140,134,694,391,45
5,799,211,182,744,208,5
99,001
1199
階段の問題:解法2
何回調べないといけない?
段数 解法1で調べる回数 解法2で調べる回数
7 17 13
12 73 23
50 3,236,383(323万) 99
100 4,132,674,661,507(4兆) 199
200 6,738,660,265,660,308,8
07,737,463
399
600(東京タワー階段の段
数)
47,636,839,310,365,630,
340,208,491,560,681,036
,757,140,134,694,391,45
5,799,211,182,744,208,5
99,001
1199
(だいたい)2倍
→段数に比例
階段の問題:解法2
コンピュータは何回調べられる?
コンピュータは一秒に10,000,000(1億回)くらい調べられる
→調べる回数が段数に比例するので、
段数が1億段くらいあっても調べられる
?段数が増えると倍々になってしまうよりずっと楽!
階段の問題:解法2
いちいち樹形図を辿るのはめんどくさいな…
?
階段の問題:解法2
いちいち樹形図を辿るのはめんどくさいな…
メモした表に注目してみる!→解法3
?
階段の問題:解法3
解法3:ある段数にいる時…
8段目にいる時、
12段目までの登り方を考える
次に登るのは10段目か11段目
5
0 2 4 6
7
8 10
11
12
13
13
14
3 9 11
12
0通り
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11
12段目までの登り方 12 - 7 5 4 3 3 2 1 1 1 0
階段の問題:解法3
解法3:ある段数にいる時…
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11
12段目までの登り方 12 - 7 5 4 3 3 2 1 1 1 0
5
0 2 4 6
7
8 10
11
12
13
13
14
3 9 11
12
0通り
8段目から12段目に登る登り方
次に11段目に登っ
てから12段目まで
登る登り方
次に10段目に登っ
てから12段目まで
登る登り方
階段の問題:解法3
解法3:ある段数にいる時…
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11
12段目までの登り方 12 - 7 5 4 3 3 2 1 1 1 0
5
0 2 4 6
7
8 10
11
12
13
13
14
3 9 11
12
0通り
8段目から12段目に登る登り方
次に11段目に登っ
てから12段目まで
登る登り方
次に10段目に登っ
てから12段目まで
登る登り方
階段の問題:解法3
解法3:ある段数にいる時…
現在何段目か … N N+1 N+2 N+3 N+4 N+5 N+6 …
12段目までの登り方 … x+y - x y - - - …
N段目から12段目に登る登り方
次にN+3段目に
登ってから12段目
まで登る登り方
次にN+2段目に
登ってから12段目
まで登る登り方
N N+2
N+3
N+4
N+5
N+5
N+6
階段の問題:解法3
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11 12
12段目までの登り方 - - - - - - - - - - - - 1
表を使って考える
12段目から12段目に登る登り方は
「そのまま居る」の1通りとする
階段の問題:解法3
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11 12
12段目までの登り方 - - - - - - - - - - - 0 1
表を使って考える
11段目から12段目に登る登り方は、
次に13段目に登る登り方と次に14段
目に登る登り方になるが、そのよう
なものは存在しない。
階段の問題:解法3
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11 12
12段目までの登り方 - - - - - - - - - - 1 0 1
表を使って考える
N+2段目から12段目までの登り方と
N+3段目から12段目までの登り方を
足し合わせて記録することを繰り返す
階段の問題:解法3
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11 12
12段目までの登り方 - - - - - - - - - 1 1 0 1
表を使って考える
N+2段目から12段目までの登り方と
N+3段目から12段目までの登り方を
足し合わせて記録することを繰り返す
階段の問題:解法3
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11 12
12段目までの登り方 - - - - - - - - 1 1 1 0 1
表を使って考える
N+2段目から12段目までの登り方と
N+3段目から12段目までの登り方を
足し合わせて記録することを繰り返す
階段の問題:解法3
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11 12
12段目までの登り方 - - - - - - - 2 1 1 1 0 1
表を使って考える
N+2段目から12段目までの登り方と
N+3段目から12段目までの登り方を
足し合わせて記録することを繰り返す
階段の問題:解法3
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11 12
12段目までの登り方 - - - - - - 2 2 1 1 1 0 1
表を使って考える
N+2段目から12段目までの登り方と
N+3段目から12段目までの登り方を
足し合わせて記録することを繰り返す
階段の問題:解法3
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11 12
12段目までの登り方 - - - - - 3 2 2 1 1 1 0 1
表を使って考える
N+2段目から12段目までの登り方と
N+3段目から12段目までの登り方を
足し合わせて記録することを繰り返す
階段の問題:解法3
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11 12
12段目までの登り方 - - - - 4 3 2 2 1 1 1 0 1
表を使って考える
N+2段目から12段目までの登り方と
N+3段目から12段目までの登り方を
足し合わせて記録することを繰り返す
階段の問題:解法3
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11 12
12段目までの登り方 - - - 5 4 3 2 2 1 1 1 0 1
表を使って考える
N+2段目から12段目までの登り方と
N+3段目から12段目までの登り方を
足し合わせて記録することを繰り返す
階段の問題:解法3
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11 12
12段目までの登り方 - - 7 5 4 3 2 2 1 1 1 0 1
表を使って考える
N+2段目から12段目までの登り方と
N+3段目から12段目までの登り方を
足し合わせて記録することを繰り返す
階段の問題:解法3
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11 12
12段目までの登り方 - 9 7 5 4 3 2 2 1 1 1 0 1
表を使って考える
N+2段目から12段目までの登り方と
N+3段目から12段目までの登り方を
足し合わせて記録することを繰り返す
階段の問題:解法3
現在何段目か 0 1 2 3 4 5 6 7 8 9 10 11 12
12段目までの登り方 12 9 7 5 4 3 2 2 1 1 1 0 1
表を使って考える
N+2段目から12段目までの登り方と
N+3段目から12段目までの登り方を
足し合わせて記録することを繰り返す
0段目から12段目までの登り方は
12通り
階段の問題:解法3
何回調べないといけない?
更新する表のマス目の個数は段数と同じ
N段目のマスを更新するのにN+2,N+3段目の
2つのマスの数を調べる必要がある
(解法2と同じ)
だいたい段数の2倍くらい調べる
階段の問題:まとめ
解法1:ありえる進み方を全て調べる
解法2:再計算しないように計算結果を記録
しておく
解法3:すぐにわかる値から計算をスタート
し、わかる値を順番に計算していく
時間がかかる
時間がかからない
遡る必要がない
(「再帰」のムダがない)
階段の問題:まとめ
解法1:ありえる進み方を全て調べる
解法2:再計算しないように計算結果を記録
しておく
解法3:すぐにわかる値から計算をスタート
し、わかる値を順番に計算していく
「全(て)探索(する)」
「動的計画法」
と言います!
動的計画法とは
小さい問題を解くと、その問題の計算結果を再利用
して大きい問題が解ける時に使う方法のこと。
※階段の問題では
小さい問題…11段目から12段目に登る登り方の個数
10段目から12段目に登る登り方の個数
少し大きい問題…8段目から12段目に登る登り方の個数
もっと大きい問題…0段目から12段目に登る登り方の個数
動的計画法とは
どういう問題を見たら使えばいい?
動的計画法とは
どういう問題を見たら使いたい?
?小さな部分に分割できて、
その部分で同じ問題が考えられるような問題
例:0段目から12段目まで登る>1段目から12段目まで登る>2段目から…
?大きな問題を解く時に小さな問題の答えをよく使うこと
例:0段目から12段目まで登る時に、2段目から12段目まで登る動作や
3段目から12段目まで登る動作をする
※一つ目に最適性の原理を合わせたものを「部分構造最適性」、二つ目を「部分問題重要性」というよ
階段の問題:解法2
解法2:同じ場所にいる時…
同じ場所にいる時
(そこまでの登り方にかかわらず)
そのあとの登り方は同じ!
→12段目まで到達した回数を数えて
覚えておけば、もう一回使える!
1段目
2
3
4
5
6
7
8
9
10
11
12
?
ここが大事!
(再掲)
動的計画法とは
どういう問題を見たら使いたい?
最適性の原理
小さな問題での最適な解と、
その時点での最適な選択を組み合わせれば、
で大きな問題の最適な解が出てくること
動的計画法とは
どういう問題を見たら使いたい?
例1: 荷物の詰め方
カバンの中に荷物をぎちぎちに詰めている時、
ある荷物を取り除いた空間もぎちぎちになっている
(そうでないとき、その空間をぎちぎちにすることで
カバン全体で見たときももっと詰められるから)
例2:最短距離
A→B→Cと最短距離で移動する時、
明らかにA→BでもB→Cでも最短距離で移動している
動的計画法を使える問題2つめ
1 一方が他方より4ゲーム多く勝ったときに優勝が決まるという
ルールで、A,Bの2人が競技を行いました。ただし、引き分けはない
ものとします。ちょうど10ゲーム目が終わったときに、Aが優勝し
ました。このときに考えられるAの勝ち負けの順は何通りあります
か。
2 一方が他方よりMゲーム多く勝ったときに優勝が決まるという
ルールで、A,Bの2人が競技を行いました。ただし、引き分けはない
ものとします。ちょうどNゲーム目が終わったときに、Aが優勝し
たときに考えられるAの勝ち負けの順は何通りありますか。
(2009年 渋谷教育学園幕張中学校 算数[2](2) 改題)
ゲームの問題
概要
?Nゲーム目で(Aの勝った回数)=(Bの勝った回数)+M
となる
?Nゲーム目までゲームが続いている必要がある
途中で(Aの勝った回数)=(Bの勝った回数)+M
になるとゲームが終わってしまう
ゲームの問題
ダメな考え方の例
小さい問題に分けたい
→「n(<N)回目でちょうどAが勝つような勝ち負けの順」
について考える…?
ゲームの問題
最適性の原理を満たしていない
「n(<N)回目でちょうどAが勝つような勝ち負けの順」 に
最適な勝ち負けの順を組み合わせても
「N回目でちょうどAが勝つような勝ち負けの順」にならない!
ダメな考え方の例
小さい問題に分けたい
→「n(<N)回目でちょうどAが勝つような勝ち負けの順」
について考える…?
ゲームの問題
「n回目においてAがBよりx回多く勝つような勝ち負けの順」
についてx=-M,-M+1…,M-1,Mすべてについて考えれば、
適切な勝ち負けの順を組み合わせることによって
「n+1回目においてAがBよりy回多く勝つような勝ち負けの順」
が出てくる!(x=Mの時について考えれば答えになる)
最適性の原理を満たすように小さい問題への分割をする!
ゲームの問題
(1) N=10,M=4の時
0 1 2 3 4 5 6 7 8 9 10
-4 0 0 0 0 0 0 0 0 0 0 0
-3 0 0 0 0 0 0 0 0 0 0 0
-2 0 0 0 0 0 0 0 0 0 0 0
-1 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0 0
試合が行われていないので
「どっちも0勝」の1通りとする
ゲームの問題
(1) N=10,M=4の時
0 1 2 3 4 5 6 7 8 9 10
-4 0 0 0 0 0 0 0 0 0 0 0
-3 0 0 0 0 0 0 0 0 0 0 0
-2 0 0 0 0 0 0 0 0 0 0 0
-1 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0 0
どちらも勝利していないので、
次の試合が行われるはず
Bが勝つ
Aが勝つ
ゲームの問題
(1) N=10,M=4の時
0 1 2 3 4 5 6 7 8 9 10
-4 0 0 0 0 0 0 0 0 0 0 0
-3 0 0 0 0 0 0 0 0 0 0 0
-2 0 0 0 0 0 0 0 0 0 0 0
-1 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0 0
Bが勝つ
Aが勝つ
ゲームの問題
(1) N=10,M=4の時
0 1 2 3 4 5 6 7 8 9 10
-4 0 0 0 0 0 0 0 0 0 0 0
-3 0 0 0 0 0 0 0 0 0 0 0
-2 0 0 0 0 0 0 0 0 0 0 0
-1 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0 0
Bが勝つ
Aが勝つ
ゲームの問題
(1) N=10,M=4の時
0 1 2 3 4 5 6 7 8 9 10
-4 0 0 0 0 0 0 0 0 0 0 0
-3 0 0 0 0 0 0 0 0 0 0 0
-2 0 0 0 0 0 0 0 0 0 0 0
-1 0 1 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0
1 0 1 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0 0
Bが勝つ
Aが勝つ
ゲームの問題
(1) N=10,M=4の時
0 1 2 3 4 5 6 7 8 9 10
-4 0 0 0 0 0 0 0 0 0 0 0
-3 0 0 0 0 0 0 0 0 0 0 0
-2 0 0 0 0 0 0 0 0 0 0 0
-1 0 1 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0
1 0 1 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0 0
(同じように調べる)
ゲームの問題
(1) N=10,M=4の時
0 1 2 3 4 5 6 7 8 9 10
-4 0 0 0 0 0 0 0 0 0 0 0
-3 0 0 0 0 0 0 0 0 0 0 0
-2 0 0 1 0 0 0 0 0 0 0 0
-1 0 1 0 0 0 0 0 0 0 0 0
0 1 0 2 0 0 0 0 0 0 0 0
1 0 1 0 0 0 0 0 0 0 0 0
2 0 0 1 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0 0
次の列も同じように進める
ゲームの問題
(1) N=10,M=4の時
0 1 2 3 4 5 6 7 8 9 10
-4 0 0 0 0 1 0 4 0 14 0 48
-3 0 0 0 1 0 4 0 14 0 48 0
-2 0 0 1 0 4 0 14 0 48 0 164
-1 0 1 0 3 0 10 0 34 0 116 0
0 1 0 2 0 6 0 20 0 68 0 232
1 0 1 0 3 0 10 0 34 0 116 0
2 0 0 1 0 4 0 14 0 48 0 164
3 0 0 0 1 0 4 0 14 0 48 0
4 0 0 0 0 1 0 4 0 14 0 48
全ての列について調べると…
ゲームの問題
(1) N=10,M=4の時
0 1 2 3 4 5 6 7 8 9 10
-4 0 0 0 0 1 0 4 0 14 0 48
-3 0 0 0 1 0 4 0 14 0 48 0
-2 0 0 1 0 4 0 14 0 48 0 164
-1 0 1 0 3 0 10 0 34 0 116 0
0 1 0 2 0 6 0 20 0 68 0 232
1 0 1 0 3 0 10 0 34 0 116 0
2 0 0 1 0 4 0 14 0 48 0 164
3 0 0 0 1 0 4 0 14 0 48 0
4 0 0 0 0 1 0 4 0 14 0 48
全ての列について調べると…
ちょうど10回目にAが勝利する…答え
ゲームの問題
何回調べないといけない?
※全部の出し順を調べると、1試合ごとに(Aが勝つ)(Bが勝つ)の
二個の選択肢が分岐するので、調べる数が倍、そのまた倍…に
階段の問題の最初の解法と同じ ?
ゲームの問題
何回調べないといけない?
動的計画法だと…
だいたいN×Mに比例した回数調べる!
表のマスはN×M個
一つのマスからは2回次のマスに足す(Aが勝つ,Bが勝つ)
階段の問題:解法2
何回調べないといけない?
コンピュータは大体一秒に一億回くらい調べられた
→100試合多く勝つと勝利する(M=100)の時
全探索だとN=20試合くらいまで
動的計画法だとN=100万試合も調べられる
?
おまけ:その他の問題
た し 算は二つの数から一つの数を求める計算で、三つ以上の数をたすときには、二つの数のたし算を
くり返していくことになります。例えば 1+2+3や1+2+ 3+4を、カッコを用いて二つの数のたし算で
書き表す方法は、次のようにそれぞれ二通り、五通りあります。
1+(2+3)、(1+2)+3???二通り
1+(2+(3+4))、1+((2+3)+4)、(1+2)+(3+4)、(1+(2+3))+4、((1+2)+3)+4???五通り
(注意) 1+(3+2)のように、たす数を並べ替えることは考えません。
このような式を完全式と呼ぶことにします。次のような式は完全式ではありません。
1+2+3、1+(2+3)+4 、(1+2+3)+4 (三つをたしている)
1+2+3+4 (四つをたしている)
(1) 1+2+3+4+5 には何通りの完全式がありますか。
(2) 1+2+3+4+5+6には何通りの完全式がありますか。
→1+2+…+Nには何通りの完全式がありますか。
(洛南中学2001年度算数)
1+2+3+4+5+6について完全式で表すとき、
1,2,3,4,5,6
1+2,2+3,3+4,4+5,5+6,
1+2+3,2+3+4,3+4+5,4+5+6,
1+2+3+4,2+3+4+5,3+4+5+6,
1+2+3+4+5,2+3+4+5+6
の小さな部分ついて完全式で表すという問題に分割できる!
おまけ:その他の問題
おまけ:その他の問題
いわゆる「カタラン数」の問題
N×Nのテーブルを用いた動的計画法で解けます!
考えてみてください!
(ちなみに、頑張ればN×1のテーブルを用いて解くことができます)
わかる人へ:区間DP的な…
まとめ
動的計画法とは?
?小さな問題を解いて、その結果を覚える
覚えた結果を使って大きな問題を解く
?問題に出てくる数が多くなっても、
全部調べるより少ない回数で調べられる
(ことが多い)
おまけ:計算量と倍々とんち話
(この部分は生徒からの質問に応じて見せれば良い)
豊臣秀吉が好きな褒美を与えようと言ったところ、
その部下は
「1日目は米1粒、2日目は米2粒、3日目は
4粒…というように、倍々の量の米粒を
100日間欲しい」
と言った。
米粒なら大したことはないと思った秀吉は簡単に
承認したが…?
おまけ:計算量と倍々とんち話
(この部分は生徒からの質問に応じて見せれば良い)
1日目…1粒
2日目…2粒
3日目…4粒(2×2)
4日目…8粒(2×2×2)
…
25日目…16,777,216粒(米俵6俵分)
35日目…17,179,869,216粒(約400トン)
50日目…562,949,953,421,312粒(日本の1年間の米の生産量)
100日目…633,825,300,114,114,700,748,351,602,688粒
(世界で5000億年間に生産される米の量)
…
おまけ:計算量と倍々とんち話
(この部分は生徒からの質問に応じて見せれば良い)
教訓
調べる回数が、問題の数字を増やすと倍々になっていく
ような方法で計算するのはさけよう!
できるだけ、
?問題の数字にかかわらず数回で調べられる
?問題の数字の増え方より少ない回数で調べられる
?問題の数字と同じくらいの回数で調べられる
方法を考えよう
(詳しくは「計算量(けいさんりょう)」で調べてみよう!)

More Related Content

中学受験算数に见る动的计画法