More Related Content
PDF
PDF
cvpaper.challenge 研究効率化 Tips PDF
PDF
PDF
PDF
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~ PDF
PDF
What's hot
PPTX
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料) PDF
PDF
PDF
PDF
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会) PDF
SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜 PDF
PDF
PDF
PDF
DQNからRainbowまで 〜深層強化学習の最新動向〜 PDF
PDF
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩- PDF
PDF
PPTX
PDF
PPTX
PDF
競技プログラミングにおけるコードの書き方とその利便性 PDF
計算論的学習理論入門 -PAC学習とかVC次元とか- PPTX
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets Similar to 勉強か?趣味か?人生か?―プログラミングコンテストとは
PDF
PDF
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder) PPTX
AtCoder Beginner Contest 012 解説 PDF
AtCoder Beginner Contest 021 解説 PPTX
AtCoder Beginner Contest 004 解説 PPTX
AtCoder Beginner Contest 034 解説 PDF
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder) PDF
AtCoder Beginner Contest 020 解説 PDF
AtCoder Beginner Contest 008 解説 PDF
U-16プログラミングコンテスト CHaser を利用したプログラミング指導 PPT
Introduction to programming competition [revised] PDF
PDF
PDF
PDF
[CE94] 高等学校での「プログラミング」教育の導入– PEN を用いて (発表資料) PDF
Introduction to programming competition [revised][PDF] ODP
PPT
Introduction to programming competition PDF
PDF
CODE THANKS FESTIVAL 2014 A日程 解説 More from Takuya Akiba
PDF
プログラミングコンテストでのデータ構造 2 ~動的木編~ PDF
PPTX
PDF
Cache-Oblivious データ構造入門 @DSIRNLP#5 PDF
PDF
PDF
PDF
TCO15 Algorithm Round 2C 解説 PDF
Learning Convolutional Neural Networks for Graphs PDF
ACM-ICPC 世界大会 2015 問題 K "Tours" 解説 勉強か?趣味か?人生か?―プログラミングコンテストとは
- 1.
- 2.
自己紹介
• 秋葉拓哉(@iwiwi)
– 東京大学 修士 2 年 (博士進学予定)
– DB 系グラフアルゴリズムの研究
• プログラミングコンテストガチ勢
– TopCoder レーティング 3035 (いわゆるレッドコーダー)
– 世界的コンテストの決勝進出 10 回
– トップ 10 入り 4 回
銅メダル (2012) 世界 7 位 (2011) 世界 9 位 (2010)
日本人のメダルは 9 年ぶり 世界 9 位 (2009)
1
- 3.
- 4.
今日の目標
プログラミングコンテストは
アツい!おもろい!
関心と理解を持ってもらう!
<学生> <先生> <社会人>
ちょっと 参加を 採用で評価
やろうかな? 促そうかな? してみるか?
3
- 5.
プログラミングコンテスト紹介
プログラミングコンテストとは
「プログラミングでやるスポーツ」
• 開始と共に問題が出題される
• 問題を解くプログラムを作成する
• 時間内に,出来るだけ多く
問題 解く 順位
4
- 6.
プログラミングコンテスト紹介
解答 問題
#include <iostream>
標準入力に,2 つの正整数が
int main() {
int a, b; 与えられます.
cin >> a >> b; その和を標準出力に出力して
cout << a + b << endl; ください.
return 0;
}
ジャッジサーバ
自動でコンパイル・テスト
即座に正誤判定・順位表更新
5
- 7.
- 8.
- 9.
プログラミングコンテストの楽しさ
楽しい!!
頭がオカシイのでは?
言われたプログラム作るだけじゃん
世界中の人を惹きつけるに
( ゚д゚) 楽しいの?課題と何が違うわけ?
足る理由があります
8
- 10.
プログラミングコンテストの楽しさ
• ゲーム的な楽しさ
– 時間制限の中で急いでプログラムを書く
– 即採点,即順位更新,リアルタイム
– インターネット越しに世界中の数千人と対戦
• 情報科学的な楽しさ
– アルゴリズムを考えるのが楽しい
– プログラミングが楽しい
9
- 11.
プログラミングコンテストの楽しさ
• ゲーム的な楽しさ
– 時間制限の中で急いでプログラムを書く
– 即採点,即順位更新,リアルタイム
– インターネット越しに世界中の数千人と対戦
• 情報科学的な楽しさ
– アルゴリズムを考えるのが楽しい
– プログラミングが楽しい
10
- 12.
問題の例
• 𝑛 匹のアリが1 cm/s で歩く
• 初期位置が入力される,向きを我々が決める
• ぶつかったら反対を向いて歩き出す
• 端まで行くと落っこちる
• アリが全滅するまでの時間を最大化したい
• 𝒏 ≤ 𝟏𝟎
11
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
問題の例
全探索のアルゴリズム
全ての向きの候補に対してシミュレーションを
行い,最大の時間を求める
向きの候補は全部で 2 𝑛 通り
10匹なら…… 210 = 1024 通り
23
- 25.
問題の例
• 𝑛 匹のアリが1 cm/s で歩く
• 初期位置が入力される,向きを我々が決める
• ぶつかったら反対を向いて歩き出す
• 端まで行くと落っこちる
• アリが全滅するまでの時間を最大化したい
• 𝒏 ≤ 𝟏𝟎
24
- 26.
問題の例 2
• 𝑛匹のアリが 1 cm/s で歩く
• 初期位置が入力される,向きを我々が決める
• ぶつかったら反対を向いて歩き出す
• 端まで行くと落っこちる
• アリが全滅するまでの時間を最大化したい
• 𝒏 ≤ 𝟏000
25
- 27.
問題の例 2
全探索のアルゴリズム
全ての向きの候補に対してシミュレーションを
行い,最大の時間を求める
向きの候補は全部で 2 𝑛 通り
1000匹なら…… 21000 ≒ 10300 通り
天文学的数字 !
(宇宙の年齢 ≒ 4.3 × 1017 秒)
26
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
プログラミングコンテストで問われるもの
アルゴリズム設計 のために必要なもの
大きく分けると 2 つ
1. 幅広い知識
– 基礎的なアルゴリズムの知識
• データ構造,グラフ,連立方程式,…
– 設計技法,その実例
• 動的計画法,貪欲法,ネットワークフロー,……
2. 柔軟な思考力・経験
– 実際にアルゴリズムを設計する
37
- 39.
プログラミングコンテストで問われるもの
アルゴリズム設計 の知識を得る方法
• 大学の授業?有名な教科書?
– 知識についてのみカバーされる
• 本「アルゴリズムデザイン」
– 設計技法について詳しく扱う珍しい本
• アルゴリズムの適用法,組合せ方
• 細かいテクニック
• 少し進んだアルゴリズム
こういった物を知るには昔は苦労がつきなかったが……!
38
- 40.
プログラミングコンテストで問われるもの
プログラム実装 のために必要なもの
• 実装に関する能力
– スラスラと書く
• 言語への慣れ,見通し
– コンパクトに書く
• 標準ライブラリの活用,抽象化
– 正確に実装する
• 間違いやすい部分に気づく,無理に短くしない
• デバッグに関する能力
– すぐに間違っている部分を特定する
– デバッグしやすいテストケースを考える
39
- 41.
プログラミングコンテストで問われるもの
プログラム実装 のために必要なもの
• 実装が楽なアルゴリズムを選択する
– アルゴリズムを思いついても,満足しない
– もっと簡単に実装できる別解を探る
– 制約が緩ければ,逆に計算量や精度が悪くし
てでもシンプルにして実装を楽に
40
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
プログラミングコンテスト
Google CodeJam
• Google の開催するコンテスト
• 世界中から 10000 人以上が参加
TopCoder
• インターネットで定期的に開催される
• 参加者にはレーティングが付き評価される
• 毎年 1 度,アメリカで世界大会
48
- 50.
- 51.
- 52.
プログラミングコンテストの真相 1
どのコンテストが一番凄いの?
• 現在 ACM-ICPC の知名度・評価がダントツ
– 歴史がある?
– 規模が大きい?
• これに僕は異議を唱えたい!
• 他の世界的コンテストも知って,それらでの戦
果も正当に評価してほしい!
51
- 53.
プログラミングコンテストの真相 1
どのコンテストが一番凄いの?
ACM-ICPC の最大の問題点:歪んだルール
• 大学,地域ごとの格差がメチャクチャ
• 例えば,大学ごとに進出校数制限
• 東大からの世界大会進出は超絶大変
• 他校の世界大会進出チームは,東大の敗退チー
ムより下位なことがよくある
– 従って,「世界大会進出」の背景が全然違う
また,年齢制限・回数制限なども厳しいため,例
えば優勝者が本当に時点最強と言えない
52
- 54.
プログラミングコンテストの真相 1
どのコンテストが一番凄いの?
一方で,世界的なインターネット予選で純粋に上
から選抜されるシステムは超公平
• TopCoder Open
– ほぼ全人類が参加可! (スタッフ以外)
• Google Code Jam,Facebook Hacker Cup
– 社員以外参加可!
ただし 18 歳以上
53
- 55.
プログラミングコンテストの真相 1
どのコンテストが一番凄いの?
ACM-ICPC の他の問題点
• 問題が面白くない
– アルゴリズム的な面白さが重視されていない
– 実装するだけの問題ばかり
• 問題の準備が適当
– 世界大会でも入力データにミス (最近だと 2007 年問題 J)
– しかも無視し結果はそのまま,公式サイトには情報なし
– 当時の掲示板カキコで見れる http://bit.ly/RZGqfE
54
- 56.
プログラミングコンテストの真相 1
どのコンテストが一番凄いの?
ACM-ICPC は裾野が広いのが素晴らしい
• 大学対抗,年に 1 回
• ACM が後援で先生方も応援してくれる
• 予選は問題も日本語
• 予選を突破すると日本の地区予選に行ける
– トップ 100 人ぐらい
– 他の大会では旅行が伴うのはかなり上のみ
参加の価値は依然として高い
55
- 57.
プログラミングコンテストの真相 2
「レッドコーダー」は本当に凄い?
レッドコーダーとは?
• TopCoder では,レーティング (評価値) に応じて,
名前に色がつく
• レーティングが 2200 に到達し赤色になった人のこと
56
- 58.
プログラミングコンテストの真相 2
「レッドコーダー」は本当に凄い?
• 世界に約 300 人,上位 3 %に相当
• 日本には現在 26 人
– ちなみに,俺がはじめた頃は 4 人とか
– 本当に神だと思って憧れてた,崇めてた
– 信じられないような速度・正確性
– 安定した上位
– 自分がそうなれる日が来ると思ってなかった
57
- 59.
プログラミングコンテストの真相 2
「レッドコーダー」は本当に凄い?
……でも実はもっと遥かに凄い集団が!!!
その名も「ターゲット」
• レーティングが 3000 に到達した人のこと
• 名前の左側のインジケータが満タンになる
– 射的の的(=ターゲット)になる
↓ レッドコーダー (溜りかけ)
• 世界に 18 人,上位 0.2%!
– レッドコーダー (= 上位 3%) のさらに上位 6%
↓ ターゲット(満タン)
• 日本には 3 人!
– lyrically, wata, 俺 (+ rng_58)
58
- 60.
プログラミングコンテストの真相 3
トップ選手はどのように育つ?
• コンテストにおける実力の差は絶大
– トップ層は安定して常に上位をとり続ける
• トップの中のトップ選手
やってる人で知らない人は居ない.普段1位を取っても誰も驚かない.)
– 3位:Petr (ロシア, 現 3489, 最高 3923)
• 落ち着きがヤバイ.着実な感じ.
– 2位:ACRush (中国, 現 3511, 最高 3902)
• 勢いがヤバイ.怖い.結構ミスってオモロイ.
– 1位:tourist (ベラルーシ, 現 3583, 最高 3656)
• 最近では人類最強,何とまだ高校生…
59
- 61.
- 62.
プログラミングコンテストの真相 3
トップ選手はどのように育つ?
そこまでじゃなくても,世界大会に進出していく
ようなトップ層はどうやって生まれる?
修行あるのみ!!
問題を解きまくる!!
61
- 63.
- 64.
プログラミングコンテストの真相 3
トップ選手はどのように育つ?
• 闇雲に解けば良いという物ではない
– 丁度いい難易度&質の良い問題
– ただ解くだけじゃなく,最大限に知見を得る
• 仲間の存在が重要かも?
– 解法や実装についての議論
– アイツに差をつけるんだ!って解きまくる
– 俺は岩田,北川(アリ本の人たち)とかなり一
緒にやってた
63
- 65.
プログラミングコンテストの真相 4
日本はなぜ強豪国に?
• 現在,日本は国別ランク 4 位
– 特に東京大学は大学ランク 1 位 (冒頭)
– 一方,僕がはじめた 5 年前はトップ 10 圏外
• 一体何が起きたのか?
64
- 66.
プログラミングコンテストの真相 4
日本はなぜ強豪国に?
• コミュニティ形成・拡大
– コンテストをやる人自体が増えた
– テクニックや知識も簡単に手に入る
• 強者登場 → 憧れて練習,の良い循環
努力だけなら一人でもできる? → ×
トップ層は,かなりの時間をコンテストに捧げる
割り切った生活になる.心強さが全然違う.
65
- 67.
プログラミングコンテストの真相 5
コンテスト勢の得意と不得意は?
基本的にはコンテストで問われるか否か
• 得意
– アルゴリズム
– プロトタイピング
– ややこしいルーチンの正確な実装
• 苦手
– 大規模なソフトウェアの設計・実装・メンテ
• コンテスト以外でこういうそういうことをやっている人も居
るとは思います
66
- 68.
- 69.
プログラミングコンテストの真相 6
勉強か?趣味か?人生か?
もちろん全部!
(ありきたりな答えですみません……)
• 勉強!
– 色々な能力が間違いなくついた
• 趣味!
– ちょー楽しい
• 人生!
– 一時期は熱中していて,本当にコンテスト=人生
– そうじゃない今でも,人生への影響は絶大
• コンテスト好きをこじらせてアルゴリズム研究
• かけがえのない人間関係や機会,経験
68