More Related Content
Similar to JOI春季ステップアップセミナー 2021 講義スライド (16)
More from Kensuke Otsuki (7)
JOI春季ステップアップセミナー 2021 講義スライド
- 10. 10
アルゴリズム本に込めた想い
設計技法
赤字の章が今回の話に関係
第 1 章
アルゴリズムとは
第 2 章
計算量とオーダー記法
第 3 章
全探索
第 4 章
再帰と分割統治法
第 5 章
動的計画法
第 6 章
二分探索法
第 7 章
貪欲法
第 8 章
配列、連結リスト
ハッシュテーブル
第 9 章
スタックとキュー
第 10 章
グラフと木
第 11 章
Union-Find
第 12 章
ソート
第 13 章
グラフ探索
第 14 章
最短路問題
第 15 章
最小全域木問題
第 16 章
ネットワークフロー
第 17 章
P と NP
第 18 章
難問対策
データ構造 グラフ
- 34. 34
アルゴリズムと IT 技術
• AI や量子コンピュータなどの、分野の流行に依らない
一生モノのスキル
• むしろ AI を学ぶための強力な下地となる
• さまざまな分野で、問題解決に寄与する
• サービス, インフラ, 物流, 製造, 公共, ヘルスケア, etc…
• 世の中に溢れるライブラリなどの速度性能向上の勘所を
つかんだり、より上手に応用したりできるようになる
- 42. 例(4):8パズルの最小手数
• 頂点:局面
42
• 辺:局面遷移
タスク例
8パズルの
最小手数を求める
(幅優先探索, 13 章)
2
7
3
4
1
5
8 6
2
7
3
4
1
5
8 6
2
7
3
4
1
5
8 6
2
7
3
4
1
5
8 6
2
7
3
4 1
5
8 6
2
7
3
4
1
5
8
6
2
7
3
4
1
5
8 6
2
7
3
4
1
5
8 6
2
7
3
4
1 5
8 6
2
7
3
4
1
5
8
6
2
7
3
4
1
5
8 6
2
7
3
4
1
5
8
6
2
7
3
4
1
5
8
6
1
8
3
2
4
5
7 6
1
8
3
7
4
5
2
6
3
8
5
4
1
2
7 6
3
7
5
4
1
6
2
8
目標配置
初期配置
- 89. 89
深さ優先探索の動き
• 矛盾するまで猛突猛進に突き進む / 矛盾したら戻る
2
3
2
2
1
1
1
2
3
2
2
1
1
1
2
3
2
2
1
1
1 2
3
2
2
1
1
1
1 2 3
2
3
2
2
1
1
1
2
3
2
2
1
1
1 2
3
2
2
1
1
1
2 2 3
1 2 3
2
3
2
2
1
1
- 90. 90
深さ優先探索の動き
• 矛盾するまで猛突猛進に突き進む / 矛盾したら戻る
2
3
2
2
1
1
1
2
3
2
2
1
1
1
2
3
2
2
1
1
1 2
3
2
2
1
1
1
1 2 3
2
3
2
2
1
1
1
2
3
2
2
1
1
1 2
3
2
2
1
1
1
2 2 3
1 2 3
2
3
2
2
1
1
- 91. 91
深さ優先探索の動き
• 矛盾するまで猛突猛進に突き進む / 矛盾したら戻る
2
3
2
2
1
1
1 2
3
2
2
1
1
2
2
3
2
2
1
1
1
2
3
2
2
1
1
1 2
3
2
2
1
1
1
1 2 3
2
3
2
2
1
1
1
2
3
2
2
1
1
1 2
3
2
2
1
1
1
2 2 3
1 2 3
2
3
2
2
1
1
- 92. 92
深さ優先探索の動き
• 矛盾するまで猛突猛進に突き進む / 矛盾したら戻る
2
3
2
2
1
1
1 2
3
2
2
1
1
2
2
3
2
2
1
1
1
2
3
2
2
1
1
1 2
3
2
2
1
1
1
1 2 3
2
3
2
2
1
1
1
2
3
2
2
1
1
1 2
3
2
2
1
1
1
2 2 3
1 2 3
2
3
2
2
1
1
- 93. 93
深さ優先探索の動き
• 矛盾するまで猛突猛進に突き進む / 矛盾したら戻る
2
3
2
2
1
1
1 2
3
2
2
1
1
2
3
2
2
1
1
3
2
2
3
2
2
1
1
1
2
3
2
2
1
1
1 2
3
2
2
1
1
1
1 2 3
2
3
2
2
1
1
1
2
3
2
2
1
1
1 2
3
2
2
1
1
1
2 2 3
1 2 3
2
3
2
2
1
1
- 94. 94
深さ優先探索の動き
• 矛盾するまで猛突猛進に突き進む / 矛盾したら戻る
2
3
2
2
1
1
1 2
3
2
2
1
1
2
3
2
2
1
1
3
2
2
3
2
2
1
1
1
2
3
2
2
1
1
1 2
3
2
2
1
1
1
1 2 3
2
3
2
2
1
1
1
2
3
2
2
1
1
1 2
3
2
2
1
1
1
2 2 3
1 2 3
2
3
2
2
1
1
2
3
2
2
1
1
3 1
- 95. 95
深さ優先探索の動き
• 矛盾するまで猛突猛進に突き進む / 矛盾したら戻る
2
3
2
2
1
1
1 2
3
2
2
1
1
2
3
2
2
1
1
3
2
2
3
2
2
1
1
1
2
3
2
2
1
1
1 2
3
2
2
1
1
1
1 2 3
2
3
2
2
1
1
1
2
3
2
2
1
1
1 2
3
2
2
1
1
1
2 2 3
1 2 3
2
3
2
2
1
1
2
3
2
2
1
1
3 1
- 96. 96
深さ優先探索の動き
• 矛盾するまで猛突猛進に突き進む / 矛盾したら戻る
2
3
2
2
1
1
1 2
3
2
2
1
1
2
3
2
2
1
1
3
2
2
3
2
2
1
1
1
2
3
2
2
1
1
1 2
3
2
2
1
1
1
1 2 3
2
3
2
2
1
1
1
2
3
2
2
1
1
1 2
3
2
2
1
1
1
2 2 3
1 2 3
2
3
2
2
1
1
2
3
2
2
1
1
3
2
3
2
2
1
1
3 1 2
- 97. 97
深さ優先探索の動き
• 矛盾するまで猛突猛進に突き進む / 矛盾したら戻る
2
3
2
2
1
1
1 2
3
2
2
1
1
2
3
2
2
1
1
3
2
2
3
2
2
1
1
1
2
3
2
2
1
1
1 2
3
2
2
1
1
1
1 2 3
2
3
2
2
1
1
1
2
3
2
2
1
1
1 2
3
2
2
1
1
1
2 2 3
1 2 3
2
3
2
2
1
1
2
3
2
2
1
1
3
2
3
2
2
1
1
3 1 2
- 98. 98
深さ優先探索の動き
• 矛盾するまで猛突猛進に突き進む / 矛盾したら戻る
2
3
2
2
1
1
1 2
3
2
2
1
1
2
3
2
2
1
1
3
2
2
3
2
2
1
1
1
2
3
2
2
1
1
1 2
3
2
2
1
1
1
1 2 3
2
3
2
2
1
1
1
2
3
2
2
1
1
1 2
3
2
2
1
1
1
2 2 3
1 2 3
2
3
2
2
1
1
2
3
2
2
1
1
3
2
3
2
2
1
1
3 2
3
2
2
1
1
3
1 2 3
- 99. 99
深さ優先探索の動き
• 矛盾するまで猛突猛進に突き進む / 矛盾したら戻る
2
3
2
2
1
1
1 2
3
2
2
1
1
2
3
2
2
1
1
3
2
2
3
2
2
1
1
1
2
3
2
2
1
1
1 2
3
2
2
1
1
1
1 2 3
2
3
2
2
1
1
1
2
3
2
2
1
1
1 2
3
2
2
1
1
1
2 2 3
1 2 3
2
3
2
2
1
1
2
3
2
2
1
1
3
2
3
2
2
1
1
3 2
3
2
2
1
1
3
1 2 3
- 100. 100
深さ優先探索の動き
• 矛盾するまで猛突猛進に突き進む / 矛盾したら戻る
2
3
2
2
1
1
1 2
3
2
2
1
1
2
3
2
2
1
1
3
2
2
3
2
2
1
1
1
2
3
2
2
1
1
1 2
3
2
2
1
1
1
1 2 3
2
3
2
2
1
1
1
2
3
2
2
1
1
1 2
3
2
2
1
1
1
2 2 3
1 2 3
2
3
2
2
1
1
2
3
2
2
1
1
3
2
3
2
2
1
1
3 2
3
2
2
1
1
3
1 2 3
終了!
- 109. 109
i 個
j 個
dp[i] ← 最初の i 個をいくつかの区間に区切る方法の
「良さ」の最大値 (i 個目のところで一旦区切るとする)
dp[i] = min(dp[i], dp[j] + f(j, i))
区間分割を扱う DP (5.6 章)
- 111. 111
例(2):発電計画問題
• 発電の on と off のタイミングを最適化する
on off on off
• 需要供給バランスの考慮などもあって、各区間のコス
ト関数 f(i, j) はとても複雑なものになる
• 「~時間以上連続稼働」といった制約も考慮