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++』 セジウィック ﻩ図形問題 ﻯ高校の数学の教科書 近代科学社
© Copyright 2024 ExpyDoc