Jun. 2017No.76

情報オリンピック若きプログラマーの発掘・育成のために

Interview

経験から語る プログラミングコンテスト攻略法

知識とそれを柔軟に応用する力、数理的思考力を磨こう

IT が社会基盤として発展する中で、コンピュータプログラミングの能力に優れた人材の発掘や育成につなげようと、政府や企業などが主催するさまざまなプログラミングコンテストが開催され、関心を集めている。国際情報オリンピックをはじめ、それらのプログラミングコンテストで結果を残すには、どんな対策が有効なのだろうか。数々のプログラミングコンテストに出場した経験を持ち、現在は高速アルゴリズムの開発など情報科学の先端研究に取り組む、情報学プリンシプル研究系の吉田悠一准教授と岩田陽一助教が語り合う。

吉田 悠一

Yuuichi Yoshida

国立情報学研究所 情報学プリンシプル研究系 准教授/総合研究大学院大学 複合科学研究科 准教授

岩田 陽一

Youichi Iwata

国立情報学研究所 情報学プリンシプル研究系 助教/総合研究大学院大学 複合科学研究科 助教

アルゴリズムとの出合い

吉田 コンピュータプログラミングの能力を競うコンテストにはいろいろなジャンルがありますが、なかでもアルゴリズムに関するものは数が多く、私もこれまでたくさん挑戦してきました。ただ残念なことに、国際情報オリンピックには、日本が参加していなかった1997年から2005年の間にちょうど高校生だったので、出場機会がありませんでした。

岩田 私もそうです。日本が参加を再開した2006年は高校3年生でしたが、当時はそのような大会があることすら知りませんでした。

吉田 プログラミングを始めたのはいつ頃ですか。

岩田 高校2年生です。総合的な学習の時間にプログラミングを独学で勉強し始めて、最初はオセロゲームのプログラムを作りました。コンテストに出るようになったきっかけは、大学にACM-ICPC(ACM 国際大学対抗プログラミングコンテスト)に参加するゼミがあり、国際情報オリンピックに出場経験があるクラスメートから、一緒に参加しようと強く誘われたことです。コンテストには、そのゼミの中でさらに複数のチームに分かれて参加しました。コンテスト向けの勉強を始めたことで、それまで書いていたプログラムの未熟さとアルゴリズムの大切さを知り、その世界にはまってしまいました。

吉田 私は中学1年生の頃に、父からお下がりのパソコンをもらって始めました。私も最初はゲームばかり作っていて、アルゴリズムなんて考えたこともなかったですね。高校1年生のとき、東京工業大学が主催している「SuperCon」という、スーパーコンピュータを使ったプログラミングコンテストに出場したのですが、予選は通過できても本戦では結果が出せませんでした。それはアルゴリズムというものをよく理解していなかったためだとわかり、プリンストン大学のロバート・セジウィック教授が書いた『アルゴリズムC++』という分厚い専門書を買って独学で勉強を始めました。情報学の道に進んだのも、そのときにアルゴリズムと出合って衝撃を受けたことがきっかけです。

岩田 最近はオンラインで気軽に参加できるコンテストも増え、グローバルに競い合える環境があるのはいいことですね。レベルもどんどん上がっていると感じます。

自分の中で知識を体系化しておく

吉田 岩田さんは、プログラミングコンテストの対策本を書かれていますね。

岩田 大学2年生の時に出版社から声をかけていただき、ACM-ICPCに出場した同じゼミの3人の共著として『プログラミングコンテストチャレンジブック~問題解決のアルゴリズム活用力とコーディングテクニックを鍛える~』(マイナビ)を出しました。当時は、プログラミングコンテストのテキストのようなものはなく、アルゴリズムを勉強しようとしても、難しい専門書しかない。そこで、コンテストの問題を1000問以上解いていた自分たちの経験を活かして、アルゴリズムの基礎が一通り学べるような構成としました。それぞれのアルゴリズムがどのような場面で使えるのか、基本と応用の例も示してありますから、コンテスト対策だけでなくアルゴリズムの学習にも活用できると思います。

吉田 プログラミングコンテストで問われる能力の一つは、与えられた課題を解決するアルゴリズムを考え、それをプログラムとして正確に実装できる力です。もう一つは、よいアルゴリズム、つまり、より短い時間で正しくコンピュータ上での計算処理ができる、効率的なアルゴリズムを考える能力ですね。

岩田 情報オリンピックでは、出された問題を解くためのプログラムを作成し、それにデータを入力して、決められた時間内に全ての入力に対して正しい出力を返さなければいけません。各問題は100点満点で、入力サイズ上限などによる部分点が設定されており、合計点を競います。コンピュータの計算資源は有限なので、入力データが大きくなって計算が複雑になると、処理に時間がかかってしまいます。効率のよい計算方法でなければ、入力データが大きくなったときに、制限時間内に計算処理が終わらないこともあります。そうしたことから、情報オリンピックの問題は、入力データが大きくなっても時間内に正しく計算できる、つまり、よいアルゴリズムに基づいたプログラムほど、高い得点が得られる仕組みになっているのです。

吉田 よいアルゴリズムを考えるためには、知識とそれを柔軟に応用する力や数理的な思考力が必要です。それらを鍛えるには、受験勉強と同じように、まずはできるだけたくさん問題を解くことが基本です。

岩田 コンテストの問題は、試験問題と同様に、過去に解いた方法と似たアプローチが使えるケースが結構あるので、まずは知識を自分の中で体系化しておくことが大切ですね。

ライバルとの交流も刺激に

吉田 計算資源を節約できるようなアルゴリズムを設計する能力は、研究者だけでなく、職業プログラマーをめざす人にも必要だと思います。プログラムを書くこと自体はそれほど難しくありませんが、よいアルゴリズムを設計する力は、ほかのよいアルゴリズムを学習することで磨かれますから、そのためにもコンテストの機会を活用してほしいですね。

岩田 コンテストはモチベーションになりますね。今の高校生は、基本的に授業ではプログラミングを習っていないでしょうし、私もそうだったように、周りに同好の士も少ないのではないかと思います。コンテストを通じて、プログラミングやアルゴリズムに関心を持つ仲間と知り合えることも大切です。

吉田 私も、コンテストで国内や海外の強豪と力を競ったことで世界が広がりました。情報オリンピックでは、最終的に4人の日本代表を選抜するために本選の上位成績者約20名による合宿も行われるので、そこでの交流もよい経験になるはずです。

岩田 2018年に「国際情報オリンピック日本大会」が開かれることで、プログラミングへの関心がさらに高まり、裾野が広がることを期待しています。私は、プログラミングコンテストの経験を通じて、誰も思いつかないようなアルゴリズムを開発したくなって研究の道に進みましたが、アルゴリズム研究は、社会のさまざまな計算処理をスピードアップし、効率化することにも貢献できると思います。

吉田 アルゴリズムというのはある意味で芸術作品のようなところがあり、私は自分の納得のいく作品を作りたくて研究者になりました。一方で、ITが社会の基盤となっていく中で、特にアルゴリズムがわかるプログラマーは産業界からも必要とされています。プログラミングやアルゴリズムに関心のある皆さんは、社会から期待される人材ですから、ぜひコンテストの上位をめざしてがんばってください。

(取材・文=関亜希子 写真=佐藤祐介)

第76号の記事一覧