J: Magical Switches JAG 模擬地区予選 2013 原案:保坂 解答:保坂・楠本 解説:保坂.

Slides:



Advertisements
Similar presentations
HBSP モデル上での 行列積を求めるアルゴリ ム 情報論理工学 吉岡健太.
Advertisements

Problem A : Everlasting...? 原案 : 泉 模範解答 : 黄・野田 解説 : 野田.
G 問題 コードアート オンライン 原案:西出 ライタ:伊藤 テスタ:西出. 問題概要 0 大きさのさまざまな n 個の円に多角形 m 個を入れら れるか判定する問題 0 ただし、同じ円に複数の多角形を入れることはでき ない 0 もし、入れられる場合は、辞書順最小の入れ方を出 力 ① ② ③ ① ②.
SQL による数独の解法 青山学院大学理工学部 矢吹太朗・佐久田博司. 数独とは何か ナンプレとも呼ばれ る制約充足問題 各行・列・ブロック に 1 から 9 の数字を一 つずつ当てはめる 新聞等に載っている ものはとても簡単 人間には難しいもの → もある.
模擬国内予選2013 Problem F テトラ姫のパズル 原案:須藤 解答:大友、須藤 解説:須藤.
4.3 マージソート.
Day2 Problem I: Memory Match ~神経衰弱~
Problem A: ねこかわいがり♪ 問題作成: 山本 解法作成: 山本・高橋 解説: 山本.
極小集合被覆を列挙する 実用的高速アルゴリズム
データ構造と アルゴリズム 第十二回 知能情報学部 知能情報学科 新田直也.
豊中高校土曜講座「数学セミナー2003」 プラトン多面体の数学 なぜ正多面体は5種類しかないのか 大阪府立豊中高等学校 深川 久.
Problem J Tile Puzzle 原案:野田 担当:平野,吉田,泉,松本.
近似アルゴリズム 第10章 終了時刻最小化スケジューリング
A: Attack the Moles 原案:高橋 / 解説:保坂.
3 二次方程式 1章 二次方程式 §2 二次方程式と因数分解         (3時間).
4.3 連立1次方程式   Ax = b   (23) と書くことができる。
5個の数字0,1,2,3,4から異なる3個を選んで3桁の整数を作る。
I: Tokyo Olympics Center
電気回路第1スライド4-1 電気回路第1 第4回 ー網目電流法と演習ー 目次 2網目電流の設定 (今回はこれだけです。)
Problem G : Entangled Tree
スペクトル法による数値計算の原理 -一次元線形・非線形移流問題の場合-
1 次方程式 直線   と 軸が交わる点 解ける! 解析的に解ける(解析解)   または 厳密に解ける (厳密解)
整数計画法を用いた スリザーリンクの解法 杉村 由花 (東京大学)
数楽(微分方程式を使おう!) ~第5章 ラプラス変換と総仕上げ~
出題: 大橋 テスト: 大橋・平原・秋葉 解説: 大橋(スライド)・平原(登壇)
An Algorithm for Enumerating Maximal Matchings of a Graph
重力3体問題の数値積分Integration of 3-body encounter.
JAG Regional Practice Contest 2012 問題C: Median Tree
データ構造と アルゴリズム 第二回 知能情報学部 新田直也.
 Combinations(2)        古川 勇輔.
ランダムウォークに関するいくつかの話題 ・ランダムウォークの破産問題 ・ランダムウォークの鏡像原理 1 小暮研究会Ⅰ 11月12日
第二回 連立1次方程式の解法 内容 目標 連立1次方程式の掃出し法 初期基底を求める 連立1次方程式を掃出し法を用いてExcelで解析する
第6章 2重ループ&配列 2重ループと配列をやります.
Problem C: Princess' Japanese
ACM ICPC 国内予選 2006 模擬練習会総評 2006 / 06 / 18 ACM ICPC OB/OG 会.
模擬国内予選2014 Problem C 壊れた暗号生成器
2013年度模擬アジア地区予選 Problem E: Putter
9.NP完全問題とNP困難問題.
A path to combinatorics 第6章前半(最初-Ex6.5)
原案・解説 : 野田 解答 : 野田・吉田 Problem D Futon ~布団~.
s a b f c e d 2016年度 有限幾何学 期末試験 問1:15点
7.時間限定チューリングマシンと   クラスP.
モデリングシミュレーション入門(井庭崇)
7-3.高度な木 (平衡木) AVL木 平衡2分木。回転操作に基づくバランス回復機構により平衡を保つ。 B木
遺伝的アルゴリズムへの 統計力学的アプローチ 大阪大学 大学院理学研究科 鈴木譲 CISJ2005 於早稲田大学理工学部
第25章 単一始点最短路 3節 Bellman-Fordのアルゴリズム
データ構造とアルゴリズム 第14回 文字列の照合.
人工知能特論 9.パーセプトロン 北陸先端科学技術大学院大学 鶴岡 慶雅.
電気回路学Ⅱ コミュニケーションネットワークコース 5セメ 山田 博仁.
25. Randomized Algorithms
計算量理論輪講 chap5-3 M1 高井唯史.
計算の理論 II 言語とクラス 月曜4校時 大月美佳.
数理統計学 西 山.
変換されても変換されない頑固ベクトル どうしたら頑固になれるか 頑固なベクトルは何に使える?
情報とコンピュータ 静岡大学工学部 安藤和敏
コンパイラ 2011年10月20日
ナップサック問題 クマさん人形をめぐる熱いドラマの結末.
問題作成、解説担当:中島 副担当:坪坂、松本
サポートベクターマシン Support Vector Machine SVM
D: 壊れかけのヒープ 問題案: 稲葉.
4.プッシュダウンオートマトンと 文脈自由文法の等価性
コストのついたグラフの探索 分枝限定法 A*アルゴリズム.
C問題 高所恐怖症 原案・ライタ : 伊藤 テスタ : 青木・西出.
3 一次関数 1章 一次関数とグラフ §4 方程式とグラフ         (3時間).
データ構造とアルゴリズム 第14回 文字列の照合.
@kagamiz (Jayson Sho Toma)
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
情報処理Ⅱ 第3回 2004年10月19日(火).
グラフの帯域幅連続多重彩色 を求めるアルゴリズム (Bandwidth Consective Multicolorings of Graphs) 西関研究室 西川和秀.
プログラミング論 バイナリーサーチ 1.
Presentation transcript:

J: Magical Switches JAG 模擬地区予選 2013 原案:保坂 解答:保坂・楠本 解説:保坂

問題概要 3 行の盤,2 列ずつアルファベットがある 大文字は通れる,小文字は通れない 左端から右端まで行きたい a c A C b B

問題概要 26 個のスイッチ A, B, ..., Z 対応する文字の 通れる/通れない が入れ替わる a c A C b B

問題概要 スイッチはスタート前にしか押せない 下の例は B と C を押すとクリア a c A C b B

問題概要 ゴール可能かどうか判定せよ 可能なら押すべきスイッチの集合を 1 つ求めよ 制約 M ≤ 1,000 :アルファベットのブロックの数

解法 枝刈り探索

解法 a B C d e f こんなブロックがあったら→ 次のどれかをしないと通れない (A 押す) and (B 押さない) (C 押さない) and (D 押す) (E 押す) and (F 押す)

解法 a B C d e f 次のすべてを満たすことと同値 (A 押す) or (C 押さない) or (E 押す) (A 押す) or (C 押さない) or (F 押す) (A 押す) or (D 押す) or (E 押す) (A 押す) or (D 押す) or (F 押す) (B 押さない) or (C 押さない) or (E 押す) (B 押さない) or (C 押さない) or (F 押す) (B 押さない) or (D 押す) or (E 押す) (B 押さない) or (D 押す) or (F 押す)

解法 "● or ● or ●" という形の条件が 8 M 個あって,それらをすべて満たすようにスイッチを押すかどうか決める問題になった

解法 探索しましょう 枝刈りしましょう 最初は各スイッチを押すかどうかは未定で,"● or ● or ●" みたいな条件で分岐 全探索したら 226 通り全部調べることに 226 > 60,000,000

枝刈り 既に C を押すことが決まっているときに"(A 押す) or (B 押す) or (C 押す)" みたいな条件がでてきたら分岐不要 "(A 押す) or (A 押さない) or (B 押す)" みたいな条件がでてきたら分岐不要 何しても条件を満たしています

枝刈り "(A 押す) or (B 押す) or (C 押す)" みたいな条件で A を押して探索して失敗したら,A を押さないことにしてよい つまり,条件 "α or β or γ" に対して以下の 3 パターンを調べれば十分 α (not α) and β (not α) and (not β) and γ

枝刈り これらの枝刈りを行うと,高々 1.839326 通りにしか分岐しないことが示せます 今回はここまでやれば通せるはずです 1.839326 < 8,000,000 最大になんてきっとならないし間に合いそう? 今回はここまでやれば通せるはずです

証明 スイッチが n 個のときに高々 T(n) 通りにしか分岐しないとする 条件 "●" に対しては高々 T(n - 1) 通り 条件 "● or ●" に対しては高々 T(n - 1) + T(n - 2) 通り 条件 "● or ● or ●" に対しては高々 T(n - 1) + T(n - 2) + T(n - 3) 通り T(n) ≤ T(n - 1) + T(n - 2) + T(n - 3) よって T(n) ≤ 1.839326 1.8393 は方程式 1 = x-1 + x-2 + x-3 の解

もう少し高速化 スイッチが N 個とすると時間計算量 O(1.8393N M) になっている 同一の条件を取り除くと M が O(N3) に つまり,探索の分岐の末端 (一番計算量に影響する) では決まっていないスイッチは少ないので,条件 8000 個くらい見るのは無駄 これで O(1.8393N + M)

もう少し枝刈り 条件を順番に見ていくのではなく 分岐不要なものを優先して消す "● or ● or ●" より "● or ●" を先に見る

もう少し枝刈り という感じでがんばると,高々 1.618126 通りにしか分岐しないことが示せます ここまでやればとても速いです 1.618126 < 300,000 すごく間に合いそう! ここまでやればとても速いです 今回の環境で < 0.25 秒 (130 ケース, C++)

参考 つまり 3-SAT に変形して解いていました 一方,元の問題は 3-SAT を含んでいます 横に 2 個並ぶ文字が全部同じ場合 ということは,スイッチの個数に関する多項式時間で解けたら P = NP です

参考 3-SAT をランダムウォークを用いて解くモンテカルロアルゴリズムが知られています スイッチが N 個のとき O(1.3334N) 時間で定数確率で解が見つかる が,今回は N が小さいので N の多項式ぶんが響いて意外と時間がかかります 解が一意だったりすると結構な回数のループを回さないと見つかりません うまくやると通せる模様

別解? 他にもいろいろな枝刈り探索が考えられると思います 計算量よくわからないと思いますががんばってください ICPC では計算量がよくわからない枝刈り探索の問題が結構出題されます

結果 Accepted / Trying Teams / Submission Accepted Teams 3 / 5 / 11 hirosegolf (203:07) anta (230:59) tmt514 (288:08)