Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
joi2012-sp-day2-broadcasting
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Masaki Hara
March 21, 2012
Programming
230
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
joi2012-sp-day2-broadcasting
第11回 日本情報オリンピック 春合宿 競技2日目 「テレビ放送(Broadcasting)」 解説スライド
Masaki Hara
March 21, 2012
More Decks by Masaki Hara
See All by Masaki Hara
文字コードの話
qnighy
47
20k
バックエンドのためのアプリ内課金入門 (サブスク編)
qnighy
9
2.6k
Dockerfileの考え方
qnighy
50
19k
Arm移行タイムアタック
qnighy
1
740
Quine, Polyglot, 良いコード
qnighy
5
910
Prolog入門
qnighy
5
2.9k
Rubyのobject_id
qnighy
8
1.9k
Getting along with YAML comments with Psych
qnighy
2
3.1k
状態設計から「なんとなく」を無くそう
qnighy
90
30k
Other Decks in Programming
See All in Programming
なぜ関数型プログラミングで「型」と「証明」が語られるのか #fp_matsuri
kajitack
3
1k
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
550
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
130
テーブルをDELETEした
yuzneri
0
100
AI時代、エンジニアはどう育つのか -未経験エンジニアの成長を間近で見て考えたこと-
thasu0123
0
170
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
16
3.6k
AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch
gotok365
3
2.5k
自作OSでスライド発表する
uyuki234
1
3.9k
Foundation Models frameworkで画像分析
ryodeveloper
1
140
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
240
初めてのKubernetes 本番運用でハマった話
oku053
0
130
改善しないと、タスクが回らない。 “てんこ盛りポジション” を引き継いだ情シスの、入社3ヶ月の業務改善録
krm963
0
190
Featured
See All Featured
What does AI have to do with Human Rights?
axbom
PRO
1
2.3k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
430
Exploring anti-patterns in Rails
aemeredith
3
450
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
910
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
Mobile First: as difficult as doing things right
swwweet
225
10k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
Utilizing Notion as your number one productivity tool
mfonobong
4
460
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
Transcript
Masaki Hara @qnighy 2歳のとき強く頭を打ち、算数に目覚める。 9歳のとき強く頭を打ち、プログラミングに目覚める。 10歳のとき強く頭を打ち、Javaに目覚める。 14歳のとき強く頭を打ち、アニメに目覚める。 15歳のとき強く頭を打ち、アルゴリズムに目覚める。 17歳のとき強く頭を打ち、形式的定理証明に目覚める https://twitter.com/#!/qnighy/status/25315686027
問題 平面上にN個の点がある K個の円を配置(場所・大きさは任意)し、それらの点をカ バーする それぞれの円について、半径の二乗に比例するコストが かかる
コストの合計値を小さくしたい 出力のみ提出
問題 平面上にN個の点がある K個の円を配置(場所・大きさは任意)し、それらの点をカ バーする それぞれの円について、半径の二乗に比例するコストが かかる
コストの合計値を小さくしたい 出力のみ提出
出力のみ問題! 一般的なアドヴァイスから
出力のみ問題! (1) 入力を見ながらコーディングできる 入力データの特徴は最大限活用しよう そのためにビジュアライザが欲しい時もある
出力のみ問題! (2) プログラムを提出する必要がない いくつプログラムを使ってもよい 手作業をしてもよい 場合によっては有用(e.g.
IOI2010 Maze) ただし、Wrong Answerに注意
出力のみ問題! (3) プログラムを提出する必要がない 1秒以内に実行する必要はない 長い時間かけて良い答えを得る C/C++で書く必要もない
Ubuntuなら、bash, Perl, Pythonは確実に入っています ブラウザでJavaScriptを動かすこともできます ただし、コンテストの禁止事項には注意
出力のみ問題! (4) 何回でも挑戦できます 出力のみ問題では、手動でのパラメーター調整が重要にな ります。 時間をかけるほど良い解が出るプログラムはgood
パラメーター調整が簡単にできるようにするとgood
出力のみ問題! (5) ※5時間コンテストです!!! 出力のみ問題にこだわりすぎないように 無制限に時間を消費するので、最後にするのが無難? 複雑な戦略(焼きなましやGA)は、5時間コンテストではあま
り力を発揮しないかもしれません パラメーター調整が難しいし。 山登り法や「焼きっぱなし」がおすすめです
出力のみ問題! 入力データの特徴を活用する いくつプログラムを作ってもよい 好きなだけ実行してよい
閑話休題
問題 平面上にN個の点がある K個の円を配置(場所・大きさは任意)し、それらの点をカ バーする それぞれの円について、半径の二乗に比例するコストが かかる
コストの合計値を小さくしたい
入力の性質 ビジュアライザを書く JavaScript+Canvasで絵を描けます
入力の性質 ビジュアライザを書く
入力の性質 01.txt 02.txt
入力の性質 03.txt 04.txt
入力の性質 05.txt
入力の性質: 考察 入力によって性質が違う 均等なもの (01, 05) 若干ばらつきのあるもの(02,
03) 狙ってるとしか思えないもの(04) アルゴリズムによって得手不得手がありそう
考察 考察: カバーしたい点集合に対して、最小包含円を決め ることができる →以下の2つの問題に分かれる K個の点集合を作る
それぞれの点集合について、最小包含円を求める
最小包含円 与えられた点を全て含む円で、最も半径が小さいもの O(n^3) 平均O(n) その他 -
貪欲法やエセ最小包含円
最小包含円 - O(n^3) ≤ 2 のときは自明 = 3
のとき 鈍角三角形の場合…一番長い辺が直径 鋭角三角形の場合…外接円を考える ≥ 3 のとき 全ての三角形を考えて、その最小包含円のうち最も大きい ものを選べばよい
最小包含円 – 平均O(n) min_disk(, ): 点集合とを含む最小包含円を求める。 ただしは周上にあることが保証されている。 が空なら、
の外接円が答え から点をひとつ選び、とする を除いた最小包含円min_disk( − , )をとおく。 ∈ なら、が答え ∉ なら、 は最小包含円の周上にある → min_disk( − , + {})が答え
最小包含円 – 平均O(n) 点の順番がランダムになっているとする 最小包含円の周上に点は3個程度しかない → min_disk(
− , + {}) が呼び出される確率は (3 − #)/程度 したがって、平均で()
最小包含円 – その他の方法 中心を決めると、必要な半径は で求まる 貪欲法 円の中心を、必要な半径が小さくなる方向に進めていく
適当な値で代用する 円の中心 = 全ての点をカバーする矩形の中心 などとおく それなりに良く近似できるし、簡単に書ける
K個の点集合を決める 乱択で近傍探索 クラスタ解析 その他の方法
K個の点集合 – 近傍探索 とりあえず適当に点集合をおく(乱数とかで) 近傍は以下のように選ぶ 適当な点を選び、適当な集合に移動させる
スコアに応じて、その近傍に移動する 均等なデータのほうが強い
K個の点集合 – クラスタ解析 データ群を類似関係にあるグループに分類する方法 ここでは「K平均法」を使う
K個の点集合 – クラスタ解析 データ群を類似関係にあるグループに分類する方法 ここでは「K平均法」を使う
K個の点集合 – クラスタ解析 データ群を類似関係にあるグループに分類する方法 ここでは「K平均法」を使う 平均
K個の点集合 – クラスタ解析 データ群を類似関係にあるグループに分類する方法 ここでは「K平均法」を使う 平均
K個の点集合 – クラスタ解析 データ群を類似関係にあるグループに分類する方法 ここでは「K平均法」を使う 平均
K個の点集合 – クラスタ解析 データ群を類似関係にあるグループに分類する方法 ここでは「K平均法」を使う 平均
K個の点集合 – クラスタ解析 データ群を類似関係にあるグループに分類する方法 ここでは「K平均法」を使う まばらなデータに強い
K個の点集合 – その他の方法 Kruskal法と同様に、N個から併合を繰り返してK個にす る
その他の方法の紹介 中心決め打ち 貪欲法などを使って半径を決める
それでは
生徒の最良データの紹介
生徒の最良データの紹介 in01 JPN17 スコア 247498181034
生徒の最良データの紹介 in02 JPN18 スコア 246525708455
生徒の最良データの紹介 in03 JPN18 スコア 208558463568
生徒の最良データの紹介 in04 JPN18 スコア 176846776195
生徒の最良データの紹介 in05 JPN18 スコア 342198348502
参考: 得点分布 0 2 4 6 8 10 12 14
まとめ 出力のみ問題に特化した戦略を とにかくプログラムを回しまくるとか 5時間という短い時間内でできることを この時間内でできる戦略をしよう
01→適当な最小包含円+局所探索が良さそう 02-05→適当な最小包含円+クラスター分析が良さそう まだ改善の余地はあるとはいえ、5時間のコンテストでの 成績としては十分ではないでしょうか ただ、不正なデータで0点の人が多いのは勿体無いですね
ご清聴ありがとうございました 今日もよく寝て万全の体調で3日目に臨みましょう。
ご清聴ありがとうございました 今日もよく寝て万全の体調で3日目に臨みましょう。 (拍手!)