株式会社わくわくスタディワールド

株式会社わくわくスタディワールド

応用情報技術者試験のアルゴリズムに必要な要素

わく☆すた,美月です。
私は,情報処理技術者試験の過去問と戯れるのが,大好きです。
ただ,「解く」というだけでなく,人間模様を想像してみたり,問題を解くのに必要な知識を分析してみたり,過去問をネタにいろいろやってみるのはとっても楽しいです。
ということで,不定期で,過去問をいろいろ分析してみようかなと思います。
ただ,先に,これは「過去問解説」のように,問題を解くのに役立つ物ではなく,あくまで「過去問と戯れる」ことを,お断りしておきます。
ってことで,まず最初は,応用情報技術者試験のアルゴリズム。
応用情報技術者試験のアルゴリズムの過去問は,今年の春の,平成21年午後問2の,一問しかありません。なので,この問題をネタにします。
アルゴリズムのネタは,定番アルゴリズムのハッシュ法です。
ハッシュ法で衝突が起こった時の対処法に,チェイン法(リストでキー値をつなげるやつ)を利用した場合の問題です。ソフトウェア開発技術者試験の時には,小町算やらカプレカ操作やら見たことのないアルゴリズムが多かったのですが,これは定番なので,解きやすい,やさしい問題かと思います。
ただ,試験後,「アルゴリズム,やさしかったよね」というと,結構「そんなことない!わけわかんなかった。」という意見も多かったので,何が難しかったのかな,とちょっと原因を推測してみました。
問題文を洗ってみると,次のような言葉や命令が出てきます。
 ・構造体
 ・関数
 ・参照 (ポインタ)
 ・new 命令で構造体の「実体」を生成 (インスタンス)
 ・nullを使ってる
このあたりは,「アルゴリズム」というより「プログラミング」という感じかと思います。
特定の(とはいえ一般的な)プログラミング言語特有の用語が結構出てきます。これは,基本情報技術者試験にはない,応用情報技術者試験の大きな特徴の一つです。
出てくる内容を見る限り,構造化言語とオブジェクト指向言語の合いのこみたいな言語なので,C,C++とかJavaとか,複数の言語を知らないと取っつきにくいと思います。
やってる内容としては,ハッシュ法を利用して,データを探索したり(設問2,関数search),追加したり(設問3,関数addNode)するプログラムの穴埋めがメインです。ややこしい話ではないので,問題に出てくるプログラミング言語特有の言葉(参照とかnullとか)の意味がわかれば,特に問題なく解けると思います。
設問1は,「衝突って何?」っていうサービス問題です。
設問4は,アルゴリズムと言うより,問題文をちゃんと読んでるかどうかの国語力の問題かと思います。「表の大きさmがデータの個数nより十分大きい」ことが書いてあるんだから,衝突がめったに起こらない。なので計算量のオーダーはo(1)に決まってるじゃん,って感じの問題です。
ってことで,この問題を解くためには,「アルゴリズムの学習」だけでなく,「何かあまり古くないプログラミング言語(Javaぐらいがベスト)で実務のプログラムが組める」ことが必要な感じです。
この問題を解くのに必要なアルゴリズムの知識は,
 ・ハッシュ法 (できればチェイン法も)
 ・線形リスト
 ・計算量(o(オーダー)記法)
です。このあたりは,まともな参考書ならどれでも出ているかと思います。こういう定番アルゴリズムを理解する必要はもちろんあります。でも,その上で,「プログラミングスキル」も必要になってくる,それが応用情報技術者試験のアルゴリズムだと思います。
「基本情報技術者試験よりも言語がない分簡単」というわけでは全然なく,むしろプログラミング言語については,結構高度なことが要求されています。
なので,個人的には,基本情報技術者試験を飛ばして応用情報技術者試験を受けるのは,あまりおすすめできないと考えてます。