アルゴリズム - Kmonos.net
Download
Report
Transcript アルゴリズム - Kmonos.net
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++』
セジウィック
ﻩ図形問題
ﻯ高校の数学の教科書
近代科学社