情報オリンピックに参加するには、どうしたらいいの?
◇ 情報オリンピックでは、どんなことを競うの?
情報オリンピックは、中学生や高校生(主として高校生)向けの「与えられた数理情報科学的な問題をプログラムを作ることによって解決する力を競う知の競技会」です。
情報オリンピックでは、
参加者はプログラムを作成して、与えられた問題の答をそのプログラムで計算して出力します。
作成したプログラムが正しい答を出すかどうかをテストするためのデータが問題ごとに複数個(数個から20個くらい)与えられます。
これらのデータのうちのいくつに正しい答を出力したかで成績が決まります。
ただし、問題ごとに、プログラムの実行時間(や使用メモリ量)に制限が設定されています。
良いプログラム(=効率の良いアルゴリズムを用いたプログラム)を作らないと、テストデータのうちの何個かには制限時間内で答を出すことがむずかしいように問題とテストデータが作られています。
一方、正しく動作する(=正しい解法を用いている)プログラムでさえあれば、たとえ効率は悪いプログラムであっても、テストデータのうちのいくつかに対しては(易しい問題の場合には、すべてに対して)正解が求められるようにテストデータは作られています。
出題される問題は、
サイコロを振るとか、ゲームを行なうとか、交通渋滞の様子を模倣してみるとかのように、さまざまな事象や現象等の模倣(シミュレーション)をプログラムを用いて行なってみることにより答を求める問題
数理的な問題解決能力や知識を必要とする問題(その問題を解決するためには数学やアルゴリズムに関する知識やセンスが必要とされる問題)
1. と 2. のミックスした問題(1. によって試行してみて、2. の一般的な解法を推測したり、あるいは確認したりする)
といった「数理的問題解決をプログラムによって行なう能力」を問う類のものです。単に暗記している知識を試す類の問題とか、ウェブのデザイン力とか、何らかの情報発信におけるプレゼンテーションの優劣とかを競う類の問題は出題されません。
◇ 何を勉強したらいいの?
まず、プログラミングの技能をしっかり身に付けましょう。情報オリンピックの日本国内
本選
(日本情報オリンピック=JOI)や国際大会(国際情報オリンピック=IOI)で使われるプログラミング言語はC,C++,Javaのどれかということが決まっていますので、このうちのどれか1つの言語を勉強するとよいでしょう。(ただし、日本情報オリンピックの
予選では
特にプログラミング言語を限定していません。)
これらのプログラミング言語を勉強するための参考書はたくさん出版されています。 書店で手にとってみて、自分にとってわかりやすいものをまず使ってみるのがよいでしょう。
知人等にプログラミングのことを多少なりとも知っている人がいれば、その方のアドバイスを受けてみるのもよいでしょう。通っている中学や高校にコンピュータクラブのようなものがあるなら、そこに参加して先輩や同輩や後輩と一緒に勉強するのもよいかもしれません。
◇ どのように勉強したらいいの?
プログラミングの学習は机上で行うものではなく、実際にコンピュータを使って実習を行いながら習得することが大事です。そのためには、習得するプログラミング言語の開発環境(コンパイラやエディタ等の、必要なソフトウェア群)を自分のコンピュータにインストールすることが必要です。
例えば、第8回日本情報オリンピック(JOI 2008-2009)の本選では次のような環境が使われました。
ハードウェア
ノート型パーソナルコンピュータ (富士通 FMW-C8240 【FMVNC5BC3】)
CPU: Intel CoreDuo T5500 1.66GHz
メモリ: 1GB
ハードディスク: 80GB
本体ディスプレイ: 15 型TFT液晶ディスプレイ
マウス: ホイール付き3ボタンマウス
ソフトウェア
Windows XP professional SP2
Cygwin (
http://www.cygwin.com/
)
gcc/g++ (GCC) 3.4.4 ( Cygwin 上のもの )
gdb 6.8.0 ( Cygwin 上のもの )
C++ STL Document
(英語)
Java SE Development Kit (JDK) 6 Update 11 (
API ドキュメント
(英語) を含む ) (
http://java.sun.com/javase/ja/6/download.html
)
Eclipse SDK 3.4.1 (
http://www.eclipse.org/
)
Eclipse JDT (Java Development Tools) 3.4.1 ( Eclipse SDK 3.4.1 に含まれる )
Eclipse CDT (C/C++ Development Tools) 5.0.1 (
http://www.eclipse.org/cdt/
)
Meadow 2.10 (ASAGAO) based on Emacs-21.4 (
http://www.meadowy.org/meadow/
)
Vim 7.1-20080531 香り屋版 (
http://www.kaoriya.net/#VIM71
)
TeraPad 0.93 (
http://www5f.biglobe.ne.jp/~t-susumu/library/tpad.html
)
これらのソフトウェアはどれも無料で手に入れることができます。それぞれのウェブサイトで直接確認するとともに、インターネットでいろんなサイトを検索して調べるとよいでしょう。プログラミング言語の参考書ではこれらのことに関しても書かれていることがありますので、参考書を選ぶときに気をつけてみてください。
◇ プログラムが少し書けるようになったら・・・
プログラミングにある程度自信が付いたら、日本情報オリンピックの過去問に挑戦してみましょう。過去の問題に解説を付けたものが情報オリンピック日本委員会のウェブサイトで公開されています。
日本情報オリンピックの過去問と解説
(日本情報オリンピックについては
ここ
をご覧ください)
国際情報オリンピックの過去問と解説
(国際情報オリンピックについては
ここ
をご覧ください)
予選に参加申込をした方には、希望者すれば、過去の情報オリンピック(JOIとIOI)の問題と解答・解説をまとめて冊子として印刷したものを無料で差し上げますので、住所氏名と希望する冊子番号をお知らせ下さい。
〒160-0022 東京都新宿区新宿7−26−37−2D
情報オリンピック日本委員会
TEL: 03-5272-9794(平日 午後1時〜5時) FAX: 03-5272-9791
郵便振替:(加入者名)特定非営利活動法人 情報オリンピック日本委員会 (口座番号)00100-3-299396
No
冊 子 名
年 度
ページ数
1
第1回〜第8回 国際情報オリンピック 問題と解説(日本語)
1989〜1996
174ページ
2
第1回〜第4回 日本情報オリンピック問題と解答
1994〜1997
235ページ
3
第5回 日本情報オリンピック問題と解答
2005
45ページ
残部少数
これらの問題を解いてみると、プログラミングの技能だけでなく、アルゴリズムとかデータ構造ということについても勉強する必要があることが、自然とわかってくるでしょう。
◇ アルゴリズムとかデータ構造などについて勉強するには・・・
アルゴリズムの設計に関する一般論、個々の具体的な問題に対するさまざまなアルゴリズムの例、良いアルゴリズムを設計するために必要な(役立つ)データ構造に関する解説などを含む参考書をいくつか挙げておきます。*印を付けたものは特に奨められます。
*
A.V.エイホー・J.E.ホップクロフト・J.D.ウルマン 著/野崎昭弘 他訳、 『アルゴリズムの設計と解析 I ,II』、サイエンス社、1977.
(説明に Algol 風のプログラミング言語を使用)
茨木俊秀 著、『アルゴリズムとデータ構造』、昭晃堂、1989.
(説明にプログラミング言語 Pascal を使用)
石畑清 著、『アルゴリズムとデータ構造』、岩波書店、1989.
(説明にプログラミング言語 Pascal を使用)
N.ヴィルト 著/浦昭二・國府方久史 訳、『アルゴリズムとデータ構造』、近代科学社、 1990.
(説明にプログラミング言語 Pascal を使用)
平田富夫 著、『アルゴリズムとデータ構造』、森北出版、1990.
(説明にプログラミング言語 Pascal を使用)
奥村晴彦 著、『C言語による最新アルゴリズム事典』、技術評論社、1991.
浅野哲夫 著、『データ構造』、近代科学社、1992.
(説明にC言語を使用)
*
R.セジウィック 著/野下浩平・星守 他訳、『アルゴリズムC++』、近代科学社、1994.
(C++を使用)
近藤嘉雪 著、『定本 Cプログラマのためのアルゴリズムとデータ構造』、 ソフトバンククリエイティブ、1998.
茨木俊秀 著、『Cによるアルゴリズムとデータ構造』、昭晃堂、1999.
(C言語を使用)
Robert Lafore 著/岩谷宏 訳『 Javaで学ぶアルゴリズムとデータ構造』、 ソフトバンククリエイティブ、1999.
浅野孝夫・今井浩 著、『計算とアルゴリズム』、オーム社、2000.
(アルゴリズムの記述は日本語)
東野勝治・臼田昭司・葭谷安正 著、『C言語によるアルゴリズムとデータ構造入門』、 森北出版、2000.
杉原厚吉 著、『データ構造とアルゴリズム』、共立出版、2001.
(説明にプログラミング言語 Pascal を使用)
柴田望洋・辻亮介 著、『C言語によるアルゴリズムとデータ構造』、 ソフトバンククリエイティブ、2002.
*
紀平拓男・春日伸弥、『プログラミングの宝箱 アルゴリズムとデータ構造』、 ソフトバンククリエイティブ、2003(C言語、Java).
矢沢久雄 著、『C言語で学ぶアルゴリズムとデータ構造 基礎の基礎』、ナツメ社、2003.
奥村晴彦 著、『Javaによるアルゴリズム事典』、技術評論社、2003.
浅野哲夫・和田幸一・増澤利光 著、『アルゴリズム論』、オーム社、2003.
(説明にC言語を使用)
近藤嘉雪 著、『Javaプログラマのためのアルゴリズムとデータ構造』、 ソフトバンククリエイティブ、2004/03/22
横森貴 著、『アルゴリズムとデータ構造 計算論』、サイエンス社、2005.
(説明にプログラミング言語 Pascal を使用)
*
R.セジウィック 著/野下浩平・星守・佐藤創・田口東 訳、『アルゴリズムC・新版』、2004.
柴田望洋 著、『Javaによるアルゴリズムとデータ構造』、 ソフトバンククリエイティブ、2005.
柴田望洋・辻亮介 著、『 新版 C言語によるアルゴリズムとデータ構造』、 ソフトバンククリエイティブ、2005.
*
藤原暁宏 著、『アルゴリズムとデータ構造』 (情報工学レクチャーシリーズ)、森北出版、2006年.
*
T.コルメン他 著/浅野哲夫・梅尾博司 他訳、『アルゴリズムイントロダクション1・2・3』、近代科学社、1995 / 2007(1・2の和訳).
(アルゴリズムに関するバイブルのような大著.辞典説明に仮想的プログラミング言語を使用)
*
J.Kleinberg and E.Tardos著/浅野孝夫・浅野泰仁・小野孝男・平田富夫訳、『アルゴリズムデザイン』、共立出版、2008年.
(お奨めの1冊)
Pascal はプログラミングの教育用の言語として世界中で広く用いられていたものです(現在では、Delphi がその後継言語です)。C 言語や Java と同様に Algol の流れを汲む言語です。
◇ さあっ、情報オリンピックに挑戦しよう!!
プログラミングの基本が習得できたら(データ構造や各種のアルゴリズムについて勉強途中であっても)、力試しのつもりで日本情報オリンピックの予選(易しい問題も含まれています)に挑戦してみる価値はあります! 参加料は無料ですし、自宅に居ながら参加することもできますから。
参加登録は情報オリンピック日本委員会のウェブサイトから行います(2008年度の予選は終了しました。予選は例年、12月中旬の日曜日に実施され、参加受付は9月頃から予選数日前まで行います。参考:
JOI 2008/2009 の実施概要
)。