Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
いろいろな問題の解説 Masaki Hara IOI2013直前合宿にて
Slide 2
Slide 2 text
目次 • Hotter Colder (IOI 2010) • SaveIt (IOI 2010) • Parrots (IOI 2011) • Maze (IOI 2010) • Disparity (JOI Open 2013)
Slide 3
Slide 3 text
Hotter Colder • 1以上N以下の整数を当てたい • 1以上N以下の整数を質問する • 直前に聞いたときよりも近いか遠いかがわか る • できるだけ少ない回数で当てたい
Slide 4
Slide 4 text
Hotter Colder • 考察 △ △ 直前に質問した位置 今回質問した位置
Slide 5
Slide 5 text
Hotter Colder • 考察 △ ● △ 直前に質問した位置 今回質問した位置 Colder
Slide 6
Slide 6 text
Hotter Colder • 考察 △ ● △ 直前に質問した位置 今回質問した位置 Same
Slide 7
Slide 7 text
Hotter Colder • 考察 △ ● △ 直前に質問した位置 今回質問した位置 Hotter
Slide 8
Slide 8 text
Hotter Colder • 考察 Colder Same Hotter 直前に質問した位置 今回質問した位置
Slide 9
Slide 9 text
Hotter Colder • 考察 Colder Same Hotter 直前に質問した位置 今回質問した位置
Slide 10
Slide 10 text
Hotter Colder • 考察 • 大きいか小さいかがわかる • 基準: (直前のクエリ + 今回のクエリ) / 2
Slide 11
Slide 11 text
Hotter Colder • 普通の「大きい/小さい」問題との違い
Slide 12
Slide 12 text
Hotter Colder • 普通の「大きい/小さい」問題との違い – 思った通りの質問ができないことがある – 例1: 直前に5を質問しているときに5との大小 – 例2: 直前に5を質問しているときに1との大小
Slide 13
Slide 13 text
Hotter Colder • 対策
Slide 14
Slide 14 text
Hotter Colder • 対策1: 1クエリに2回質問する – こうすれば必ず好きな質問ができる • (50点)
Slide 15
Slide 15 text
Hotter Colder • 対策2: 大きい/小さい/同じ の3値情報である ことを利用する – クエリの回数を少しだけ減らせる • (75点)
Slide 16
Slide 16 text
Hotter Colder • 満点解法
Slide 17
Slide 17 text
Hotter Colder • 満点解法を考える前に、小さいケースで試す
Slide 18
Slide 18 text
Hotter Colder • 問題 – Nが与えられたとき、質問回数を最小化しなさい – N <= 100
Slide 19
Slide 19 text
Hotter Colder • 問題 – Nが与えられたとき、質問回数を最小化しなさい – N <= 100 • 解答 – DP – dp[直前の質問,絞り込んだ範囲] =そこからの質問回数
Slide 20
Slide 20 text
Hotter Colder • これを実際に実行するとわかること – 十分小さいときは、1→3→5→7の順番で質問する のが良い – それより大きいときは、 = 3 ⋅ 2 − 1のときが一 番効率がよい
Slide 21
Slide 21 text
Hotter Colder • = 3 ⋅ 2 − 1 の場合の戦略
Slide 22
Slide 22 text
Hotter Colder • = 3 ⋅ 2 − 1 の場合の戦略 23 − 1個 23 − 1個 23 − 1個
Slide 23
Slide 23 text
Hotter Colder • = 3 ⋅ 2 − 1 の場合の戦略 23 − 1個 23 − 1個 23 − 1個 ● 1回目の質問
Slide 24
Slide 24 text
Hotter Colder • = 3 ⋅ 2 − 1 の場合の戦略 23 − 1個 23 − 1個 23 − 1個 ● ● 1回目の質問 2回目の質問
Slide 25
Slide 25 text
Hotter Colder • = 3 ⋅ 2 − 1 の場合の戦略 23 − 1個 23 − 1個 23 − 1個 ● ● 1回目の質問 2回目の質問
Slide 26
Slide 26 text
Hotter Colder • = 3 ⋅ 2 − 1 の場合の戦略 23 − 1個 23 − 1個 23 − 1個 ● ● ● 1回目の質問 2回目の質問 3回目の質問
Slide 27
Slide 27 text
Hotter Colder • = 3 ⋅ 2 − 1 の場合の戦略 23 − 1個 23 − 1個 23 − 1個 ● ● ● 1回目の質問 2回目の質問 3回目の質問 両方右側に進んだ場合: 右端で2分探索 (毎回のクエリを必ず実行できる)
Slide 28
Slide 28 text
Hotter Colder • = 3 ⋅ 2 − 1 の場合の戦略 23 − 1個 23 − 1個 23 − 1個 ● ● ● 1回目の質問 2回目の質問 3回目の質問 右左の順に進んだ場合: 中央で2分探索 (毎回のクエリを必ず実行できる)
Slide 29
Slide 29 text
Hotter Colder • = 3 ⋅ 2 − 1 の場合の戦略 23 − 1個 23 − 1個 23 − 1個 ● ● 1回目の質問 2回目の質問 最初に左に進んだ場合: 左端で2分探索 (2回目の結果は使わない)
Slide 30
Slide 30 text
Hotter Colder • これによりどの場合でも均等に効率よくクエリ を消費することができる
Slide 31
Slide 31 text
Hotter Colder • これによりどの場合でも均等に効率よくクエリ を消費することができる • あとは、境界条件に注意しながらNが一般の 場合に拡張する(結構むずい)
Slide 32
Slide 32 text
Hotter Colder • Hotter Colder 教訓: 実験は大事
Slide 33
Slide 33 text
SaveIt • グラフ中の最短経路を何セットか求めたい – 高々1000個の頂点と高々36個のハブの間の最 短経路たちを求めたい • 通信計算量を小さくしてね – 質問をそのまま送っても、答えをそのまま送って も、損失が出る
Slide 34
Slide 34 text
SaveIt • グラフ中の最短経路を何セットか求めたい – 高々1000個の頂点と高々36個のハブの間の最 短経路たちを求めたい • 通信計算量を小さくしてね – 質問をそのまま送っても、答えをそのまま送って も、損失が出る
Slide 35
Slide 35 text
SaveIt • 質問をそのまま送る: 25点 • 答えをそのまま送る: 50点
Slide 36
Slide 36 text
SaveIt • 共通する構造を抜き出す • 差分をとることで情報を圧縮する • ということから、次のように考える
Slide 37
Slide 37 text
SaveIt • 全域木を1つ決める • ハブとの距離は、親との差分で定める
Slide 38
Slide 38 text
SaveIt • 全域木を1つ決める • ハブとの距離は、親との差分で定める
Slide 39
Slide 39 text
SaveIt • 全域木を1つ決める • ハブとの距離は、親との差分で定める 2 1 0 1 1 2
Slide 40
Slide 40 text
SaveIt • 全域木を1つ決める • ハブとの距離は、親との差分で定める +1 -1 +1 -1 0
Slide 41
Slide 41 text
SaveIt • 全域木の情報 – ノード数1000 × ノード番号10bit = 10000bit • ハブからの距離 – ハブ数36 × ノード数1000 × 差分2bit = 72000bit
Slide 42
Slide 42 text
SaveIt • 全域木の情報 – ノード数1000 × ノード番号10bit = 10000bit • ハブからの距離 – ハブ数35 × ノード数1000 × 差分2bit = 70000bit • 全域木を、ハブ0からのBFSで構築すると、情 報を節約できる • (75点)
Slide 43
Slide 43 text
SaveIt • 全域木の情報 – ノード数1000 × ノード番号10bit = 10000bit • ハブからの距離 – ハブ数36 × ノード数1000 × 差分5/3bit = 60000bit • 差分は3通りなので3つまとめて5bitで送れる • (100点)
Slide 44
Slide 44 text
Parrots • オウムに乗せてデータを送る • データの到着順はわからない
Slide 45
Slide 45 text
Parrots • SaveItのパクリっぽい問題 • 何か良い圧縮方法がある?
Slide 46
Slide 46 text
Parrots • SaveItのパクリっぽい問題 • 何か良い圧縮方法がある?
Slide 47
Slide 47 text
Parrots • SaveItのパクリっぽい問題 • 何か良い圧縮方法がある?
Slide 48
Slide 48 text
Parrots • SaveItのパクリっぽい問題 • 何か良い圧縮方法がある?
Slide 49
Slide 49 text
Parrots • 単に番号をつければいい
Slide 50
Slide 50 text
Parrots • 単に番号をつければいい 状況 番号 オウム0羽 0 オウム1羽(0) 1 : : オウム1羽(255) 256 オウム2羽(0,0) 257 オウム2羽(0,1) 258 : :
Slide 51
Slide 51 text
Parrots • どのように番号をつけるか?
Slide 52
Slide 52 text
Parrots • どのように番号をつけるか? • 前処理: 常に一定数のオウムを送るものとし て扱う(送らない分は256というデータだと考え る)
Slide 53
Slide 53 text
Parrots • どのように番号をつけるか? • 「y未満の自然数x個からなる単調非減少列」 を考えればよい • これは何個あるか?
Slide 54
Slide 54 text
Parrots • どのように番号をつけるか? • 「y未満の自然数x個からなる単調非減少列」 を考えればよい • これは何個あるか? • 実は、 + 個ある
Slide 55
Slide 55 text
Parrots • 証明 – = 0のとき、空の列はちょうど1通り。 – = 0のとき、0からなる列はちょうど1通り。 – 数列の末尾が − 1に等しい場合の列は帰納法 の仮定より + − 1 − 1 通り 一方、それ以外の場合の列は帰納法の仮定より + − 1 通り なので帰納法より正しい
Slide 56
Slide 56 text
Parrots • この証明と同じ手順で符号化・復号ができる
Slide 57
Slide 57 text
Parrots • この証明と同じ手順で符号化・復号ができる
Slide 58
Slide 58 text
Parrots / SaveIt • Parrots / SaveIt 教訓: – SaveItみたいに発想力が試されるものもある – でもParrotsみたいにただ対応させるだけというも のもある
Slide 59
Slide 59 text
Maze • 畑を切り開いて迷路を作ります • 幅優先探索したときの深さを大きくしたい • 切り開ける場所と切り開けない場所がありま す • 10問
Slide 60
Slide 60 text
Maze • 困難な最適化問題の一般的なテク
Slide 61
Slide 61 text
Maze • 困難な最適化問題の一般的なテク – 基本は局所探索
Slide 62
Slide 62 text
Maze • 困難な最適化問題の一般的なテク – 基本は局所探索 – ランダム要素を加えて局所探索+繰り返し試行 がオススメ • 実装が簡単 • 時間をかければ多少は改善するようになる
Slide 63
Slide 63 text
Maze • 困難な最適化問題の一般的なテク – 基本は局所探索 – ランダム要素を加えて局所探索+繰り返し試行 がオススメ – 少し工夫したいならSAっぽいことをやると良い
Slide 64
Slide 64 text
Maze • 困難な最適化問題の一般的なテク – 基本は局所探索 – ランダム要素を加えて局所探索+繰り返し試行 がオススメ – 職人の技が光るところ • 近傍の定め方 • 評価関数の定め方 • 焼きなまし等のパラメーター
Slide 65
Slide 65 text
Maze • 入力の傾向
Slide 66
Slide 66 text
Maze • Field1 – むっちゃ簡単
Slide 67
Slide 67 text
Maze • Field2,4 – 簡単そう
Slide 68
Slide 68 text
Maze • Field2 – これはよく見るとどうやって生成したかわかる
Slide 69
Slide 69 text
Maze • Field3,5 – 格子が入っている
Slide 70
Slide 70 text
Maze • Field3,5 – 格子が入っている – NP困難性の証明に使われた?
Slide 71
Slide 71 text
Maze • Field7,8 – 小さい
Slide 72
Slide 72 text
Maze • Field6,9 – まっしろ
Slide 73
Slide 73 text
Maze • FieldA – おおきい
Slide 74
Slide 74 text
Maze • FieldAの特徴: 大域的な探索をうまくする必 要があって難しい – 手でやる?
Slide 75
Slide 75 text
Maze • FieldAの特徴: 大域的な探索をうまくする必 要があって難しい – 手でやる? – 手で大域的な解を作って局所探索をするという手 もある
Slide 76
Slide 76 text
Maze • FieldAの特徴: 大域的な探索をうまくする必 要があって難しい – 手でやる? – 手でやる場合の注意: 斜めに進んだほうが効率 的
Slide 77
Slide 77 text
Disparity • 有権者の数ができるだけ均等になるように小 選挙区を定めて下さい • 5問
Slide 78
Slide 78 text
Disparity • データの傾向
Slide 79
Slide 79 text
Disparity • データの傾向 – 01,03,05
Slide 80
Slide 80 text
Disparity • データの傾向 – 04
Slide 81
Slide 81 text
Disparity • データの傾向 – 04
Slide 82
Slide 82 text
Disparity • データの傾向 – 02
Slide 83
Slide 83 text
Disparity • 近傍の定め方 • 以下の近傍はどうか?
Slide 84
Slide 84 text
Disparity • 近傍の定め方 • 以下の近傍はどうか? • あんまり良くない(幅が大きすぎて微調整がき かない)
Slide 85
Slide 85 text
Disparity • 近傍を次のようにとる 境界10個くらいを抽出 一番良い境界を探す
Slide 86
Slide 86 text
Disparity • 評価関数の定め方:disparityそのものを評価 関数とする?
Slide 87
Slide 87 text
Disparity • 評価関数の定め方:disparityそのものを評価 関数とする? – 最大の地域・最小の地域を動かさないと評価に 反映されない
Slide 88
Slide 88 text
Disparity • 評価関数の定め方:disparityそのものを評価 関数とする? – 最大の地域・最小の地域を動かさないと評価に 反映されない – 例えば:分散を使うと勾配がきれいにつく
Slide 89
Slide 89 text
まとめ • これをやれば良いという定石はあんまないっ ぽい
Slide 90
Slide 90 text
まとめ • これをやれば良いという定石はあんまないっ ぽい • せっかくなので楽しんで