150 likes | 339 Views
ACM/ICPC と アルゴリズム. speech @ 「実践的プログラミング」 稲葉 一浩. 自己紹介. 理 Ⅰ → 理学部情報科学科 → 情報理工学系研究科コンピュータ科学専攻 博士課程1年 XML を扱う専用言語の研究など 個人的には http://www.kmonos.net/ D 言語 C++. Boost ACM/ICPC 歴 2003 [Lighthouse] ビバリーヒルズ大会 (11 位 ) 2004 [Gokuri] ソウル予選、会津予選で敗退 2005 [Gokuri-Squeeze] 上海大会(惨敗 orz ).
E N D
ACM/ICPCとアルゴリズム speech @ 「実践的プログラミング」 稲葉 一浩
自己紹介 • 理Ⅰ → 理学部情報科学科 → 情報理工学系研究科コンピュータ科学専攻 • 博士課程1年 • XMLを扱う専用言語の研究など • 個人的には • http://www.kmonos.net/ • D言語 • C++. Boost • ACM/ICPC歴 • 2003 [Lighthouse] ビバリーヒルズ大会 (11位) • 2004 [Gokuri] ソウル予選、会津予選で敗退 • 2005 [Gokuri-Squeeze] 上海大会(惨敗orz)
「アルゴリズム」とは • アルゴリズム(algorithm) は、なんらかの問題を解くための手順のことである。算法(さんぽう)と訳されることもある。 -- Wikipediaより • 例 • なんらかの問題 : 整列(sorting) • アルゴリズム : クイックソート、バケツソート,...
発表の内容 × • どういう問題を解くアルゴリズムを知っているとよいのか!? • どういう問題を解くアルゴリズムは知らなくてもいいのか!?
「NP完全問題」 • NP問題 • 「答えがあってるかのチェック」は簡単な問題 • Sorting とか • NP困難問題 • どんなNP問題よりも、それ以上に「難しい」問題 • 「この問題が効率よく解ければ他のどんなNP問題も解ける」とわかっている問題 • NP完全問題 : NPかつNP困難 • NP問題の中で一番「難しい」問題
「NP完全問題」 • ICPCなどでも、よく出題される • でも、NP完全問題を効率よく解くアルゴリズムは、まだ誰も発見していない • もちろんICPCの出題者も! • うまい解き方が思いつかなくても問題なし • 「NP完全問題だ」と気づいたら、なんの工夫もないプログラムで突撃してOK! • そういう風に入力が作ってあるはず
「NP完全問題」の例 • 巡回セールスマン問題 • ハミルトン経路問題 • 集合分割問題 • 最大クリーク問題 • ナップザック問題
Traveling Salesperson Problem • 入力:都市間の移動にかかる時間 • 出力:全ての都市を巡って戻ってくる最短経路
Hamiltonian Path • 入力:点と辺でできた図形(グラフ) • 出力:全点を一度ずつ通るような経路 「ひとふでがき」 とはちょっと違う
Partition • 入力:数の集合 • 出力:和が丁度半分になるように分けられる?{1.2, 3.4, 5.6, 5.3, 0.9, 3.5} ただし、 数の集合が「小さい整数」と わかっているときは、 効率よく解ける。(DP)
Maximum Clique • 入力:グラフ • 出力:どの2点も辺でつながってるような 頂点集合の最大サイズ
Knapsack Problem • 入力:荷物(重さ、価値) • 出力:重量制限を満たす 範囲でできるだけ 価値を増やす荷物の 選び方
そのほか • Google “NP完全” • Wikipedia “NP完全”
実際に出た問題 • 2005 F (巡回セールスマン問題) • 2003 E (最適配置問題) • 2002 D (Hit & Blow) • ...
おまけ • 知っているとよいアルゴリズム • グラフ理論 • 『データ構造とアルゴリズム』 培風館 エイホ、ウルマン、ホップクロフト • 『アルゴリズムC++』 近代科学社 セジウィック • 図形問題 • 高校の数学の教科書