algorithm系の練習方針の転換

やっぱり花形のalgorithmで赤くなりたい。
Marathon Matchで赤コーダーになって、TCO Finalの出場権も獲得できた。でもやっぱりSRMとかのalgo部門やcodeforcesで赤くなってこそ、という感がある。そもそも自分がMarathon Matchに参加したのは、当時ICPCのチームメイトだったhasi君に「Marathon始めたらalgoのレーティングが上がった」と言われたのが理由だったし。
Marathonでこれだけの成果が出せたのは運が良かったからだけど、運だけで手に入れたというほど卑下するつもりはない。きっと、自分のMarathonでの成功理由をきちんと把握することによってalgoの方でも成長できるに違いない。
具体的にMarathonでこれだけ成果が出た理由を考えて、そのうちalgoの向上に繋がりそうなメタ度の高いものを選ぶと、やはり毎回反省を丁寧にやることが大事なのだと分かる。実際、Marathonでは同じ失敗を繰り返さないように強く意識するし、反省が蓄積した分今の自分は過去より確かに強くなっているという実感がある。特に、最低順位を記録したBeautifulCrosswordのときは一番反省(敗因を明確にする)に時間をかけたし、その回は一番得るものが多かったと断言できる。これは、負けたときは反省するけど勝ったときは調子にのって反省しない、という自分の特性を表しているんだろう。
ということで、これからalgorithm系の練習をするときはしっかり時間をかけて反省することにする。これまでの取り組み方は、質より量といわんばかりに易しめの問題を大量に解く、だった。これからしばらくは簡単な問題でもきちんと反省、復習するという方針に切り替える。もう少し具体的に言うと

  • バグが出ないような工夫を考える。
  • より計算量の小さい解法がないか探す。
    • あった場合、書きやすさがどれ位失われるかをはっきりさせる。
  • 思考過程を書き出してみる。
  • 他の人の解法をきちんと読んで理解する。

というのを目標にする。他の人の解法を読んで自分の思考の癖(弱点)を探したいので、しばらくは他の人の解法が読めるTopCoderCodeForcesGCJで練習することにする。
これで成果が出たら、また質より量という方針に切り替えることになるだろう(自分はまだ知らないアルゴリズム、テクニックがたくさんあるから)。