• Save
Senshu lt
Upcoming SlideShare
Loading in...5
×
 

Senshu lt

on

  • 1,062 views

 

Statistics

Views

Total Views
1,062
Views on SlideShare
991
Embed Views
71

Actions

Likes
6
Downloads
0
Comments
0

1 Embed 71

https://twitter.com 71

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Senshu lt Senshu lt Presentation Transcript

  • いい加減問題  を解いたら?北海道大学大学院 情報科学研究科修士2年 井上祐馬13年6月8日土曜日
  • • 井上 祐馬• 北海道大学 情報科学研究科 M2• TwitterとかプロコンのID: @Darsein• 研究: おねえさんの救出 πDD• 好きなもの:あずにゃん、ドーナツ• ICPC 2010,2012 アジア地区予選出場• TopCoder SRM Rate 1638 (2013/06/03現在)自己紹介13年6月8日土曜日
  • 僕はこの辺の住人13年6月8日土曜日
  • 今日の話はたぶんこの辺の人向け?13年6月8日土曜日
  • 元ネタ• この辺• ハラスメントを受けてるのは僕です!!!13年6月8日土曜日
  • 本題• 昨今、国内予選突破には 3問速解き∼4問 必要• 「Dクラスの問題を解けるか」が鍵• もちろんA,B,Cをしっかり通せることも大事年 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012突破ライン1+ 2 2+ 2+ 3 3 3 3+ 3 3+ 3+ 3+13年6月8日土曜日
  • Dは……•DarseinのD!!!•DFSのD!!!•DijkstraのD!!!•Dynamic ProgrammingのD!!!13年6月8日土曜日
  • 近年の動向年 2007 2008 2009 2010 2011 2012C シミュレーション DFS+構文解析 DFS DP DFS シミュレーションD ダイクストラ ダイクストラ ダイクストラ DFS DP ダイクストラE 幾何 幾何 マッチング DFS/ダイクストラ DP 幾何+ダイクストラ13年6月8日土曜日
  • 近年の動向•ネタではない!•Dを制す者はD問題を制す!!!•Dを制す者は国内予選を制す!!!!!年 2007 2008 2009 2010 2011 2012C シミュレーション DFS+構文解析 DFS DP DFS シミュレーションD ダイクストラ ダイクストラ ダイクストラ DFS DP ダイクストラE 幾何 幾何 二部マッチング DFS/ダイクストラ DP 幾何+ダイクストラ13年6月8日土曜日
  • DFS(Depth-First Search)•新しく見つけた場所をどんどん展開して調べていく探索= LIFO = スタック•再帰関数で比較的簡易に実装可能 1546372vector<int> graph[V];void rec(int x){if(visit[x])return;visit[x] = true;for(int i=0;i<graph[x].size();i++)rec(graph[x][i]);}13年6月8日土曜日
  • BFS(Breath-First Search)• 一番最初に見つけたものから順に調べていく探索= FIFO = キュー• キューを使ったループを用いる• 最短路を保証1753462vector<int> graph[V];queue<int> q;while(q.size()){int x = q.front(); q.pop();if(visit[x])continue;visit[x] = true;for(int i=0;i<graph[x].size();i++)q.push(graph[x][i]);}13年6月8日土曜日
  • ダイクストラ法• 辺コスト付きグラフの最短路アルゴリズム• 次に行ける未到達地点へのパスのうち最短のものを選択し続ける貪欲法• O(V2)。最短のものを選ぶのにヒープを使うとO(ElogV)0??53?252144330?653?25214433到達済未到達だけど次に行ける13年6月8日土曜日
  • 動的計画法•一回りサイズの小さい問題の答えから大きな問題の答えを導きだす手法•同じ状態では答えが変わらないことを利用して、値をメモして無駄を省く•例:ナップサック問題• アイテムがn個あり、それぞれ価値がvi, 重さがwi• 総重量S以下での価値の総和の最大値を求めよ13年6月8日土曜日
  • 動的計画法• dp[i][j]: i番目までのアイテムで総重量がちょうどjになるときの最大価値• dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]]+v[i])• 例: n=4, S=10, {(9,8), (3,3), (7,6), (8,5)}i\j 0 1 2 3 4 5 6 7 8 9 100 0 - - - - - - - - - -1 0 - - - - - - - 9 - -2 0 - - 3 - - - - 9 - -3 0 - - 3 - - 7 - 9 10 -4 0 - - 3 - 8 7 - 11 10 -13年6月8日土曜日
  • 動的計画法• dp[i][j]: i番目までのアイテムで総重量がちょうどjになるときの最大価値• dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]]+v[i])• 例: n=4, S=10, {(9,8), (3,3), (7,6), (8,5)}i\j 0 1 2 3 4 5 6 7 8 9 100 0 - - - - - - - - - -1 0 - - - - - - - 9 - -2 0 - - 3 - - - - 9 - -3 0 - - 3 - - 7 - 9 10 -4 0 - - 3 - 8 7 - 11 10 -13年6月8日土曜日
  • 0,01,02,03,04,02,33,34,3 4,5 4,63,62,81,83,84,83,94,9動的計画法• dp[i][j]: i番目までのアイテムで総重量がちょうどjになるときの最大価値• dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]]+v[i])• 例: n=4, S=10, {(9,8), (3,3), (7,6), (8,5)}13年6月8日土曜日
  • 0,01,02,03,04,02,33,34,3 4,5 4,63,62,81,83,84,83,94,9動的計画法• DPはグラフだった!!!• この辺の話は@tayama0324さんのDPの話という記事を読むとよい。DP観が変わる。13年6月8日土曜日
  • 結局 D はグラフ•DFSは探索木( グラフ)を適当な順番に探索•BFSは探索木を根に近い方から探索•ダイクストラはコスト付きグラフを近い方から探索•DPは状態グラフをループ順に探索13年6月8日土曜日
  • D の大雑把な分類ループ順始点に近い方始点から遠い方順は任意orあらゆる順コストなし(一定)DP BFS メモ化DFS DFSコストあり DP ダイクストラ メモ化DFS DFS13年6月8日土曜日
  • 探索問題の解き方• グラフを構築します( ◠‿◠ ) どのような状態を頂点にするか、辺にあたる遷移はどうなっているか• グラフの特徴を分析します(́・・`) 探索すべき順序に規則などはあるか• 探索アルゴリズムを考えます( ◠◠ ) ICPCならだいたいさっきのDFS,BFS,Dijkstra,DPくらい• 実装します(́・・`) ガンバルンバ∼(^o^)• AC!! ✌(ω✌ )三✌(ω)✌三( ✌ω)✌13年6月8日土曜日
  • まとめ•D問題級の問題は国内予選突破の肝•傾向として、DFS,Dijkstra,DP対策が必要•でも本質は全部 グラフ探索•グラフの問題を死ぬほど解いて特徴を掴もう• DFS系はICPCはじめいろんなとこで出る• Dijkstra問題はICPC、PCKあたりが多い• DP問題はSRMやJOIあたりにいっぱい13年6月8日土曜日