WASD Inc. LT会(仮) 2022-03-25
競プロへの誘 -いざな-LT会(仮) 2022/03/25u76ner
View Slide
競プロとは2- 競プロとは - 「競技プログラミング」の略 - 競技プログラミングでは、参加者全員に同一の課題が出題され、より早く与えられた要求を満足するプログラムを正確に記述することを競う。 (Wikipedia)
競プロとは3- 有名なやつの例 - AtCoder
競プロとは4- 有名なやつの例 - AIZU ONLINE JUDGE(AOJ)
競プロとは5- 問題の入力に対して解答に制限時間内に解答する - だいたい2秒とかが多い気がする(↓AtCoderでの例)
競プロとは6- 問題の入力に対して解答に制限時間内に解答する
競プロとは7- 問題の入力に対して解答に制限時間内に解答する - 問題を解くこと自体は原理的にできるが、 ナイーブに実装すると現実的な時間で解くことが不可能であることが多い
計算量の例8- 例) - an+2= an+1+ an, a1= 1, a2= 1 - このとき、a40, a100を求めよ - いわゆるフィボナッチ数列
計算量の例9- ナイーブな実装
計算量の例10- ナイーブな実装 - a100が計算できない - 計算時間 - a40: 604 ms - a45: 6,808 ms - a50: > 1 min
計算量の例11- 改善点 - a50= a49+ a48 = (a48+ a47) + (a47+ a46) = (a47+ a46) + (a46+ a45) + (a46+ a45) + (a45+ a44) = …
計算量の例12- 改善点 - a50= a49+ a48 = (a48+ a47) + (a47+ a46) = (a47+ a46) + (a46+ a45) + (a46+ a45) + (a45+ a44) = … - 重複した計算を上手く記憶しておくことで速くできそう
計算量の例13- 途中計算を記憶しておく実装
計算量の例14- 途中計算を記憶しておく実装 - 計算時間 - a40: ≒ 1ms - a100: ≒ 1ms - ちなみにこういうアルゴリズムを総称して動的計画法(DP)という
エンジニアの視点から15- 競プロをやることの利点
エンジニアの視点から16- 競プロをやることの利点 - 処理を軽くすることに目が向きやすい
エンジニアの視点から17- 例)
エンジニアの視点から18- ナイーブにやる - 二重ループは改善できそう
エンジニアの視点から19- 連想配列を使う - 二重ループが解消できる
まとめ20- 競プロでは、計算方法自体はすぐわかるけど、 それを現実的な時間で計算できるかが求められる - 普段の実装でも、細かい計算量の削減に目が行き届くようになる
21