基本情報 アルゴリズムを解くための”コツ”についてPart.1

アルゴリズム
スポンサーリンク

 

「アルゴリズム」

恐らく基本情報技術者試験を受験しようと思っている殆どの人に
苦手意識がある分野ではないでしょうか?

プログラムを理解したいけど、
プログラムをどのように読んだら良いのか分からない

問題が難しすぎる・・・

などなど。

アルゴリズムの勉強をしている人は、大抵こんな悩みを持っているでしょう。

 

そこで今回は、基本情報技術者試験の鬼門とも言える
アルゴリズムを解くためのコツ、そして頭に入れておきたいポイントについて解説します。

 

今回はあまりにも内容が長くなったため、ページを分割させていただきました。

そのため今回の記事では、アルゴリズムで出題される問題の種類やアプローチ。

次回の記事では、
問題を解くためのコツやポイントといった内容に重点を置いています。

基本情報 アルゴリズムを解くための"コツ"についてPart.2
こちらでは基本情報技術者試験のアルゴリズムを解くためのコツについて解説しています。また問題を解く際の手順も解説しているため、是非とも参考にしてください。

 

それではアルゴリズムという強敵を打ち破るため、
まずは問題の種類やアプローチについて解説していきます。

 

チョコ
チョコ

アルゴリズムって本当に難しいよな。
それこそ人によっては、
アルゴリズムで勉強をやめてしまうぐらいだからな

シロ
シロ

確かにアルゴリズムで絶望を感じるという人は多いと思う。
けどだからと言って、
アルゴリズムを捨てるような勉強はしない方が良いね。

チョコ
チョコ

あとアルゴリズム以外で、
点数勘定をするような勉強も止めた方が良い。
そんな勉強をしている時点で、
試験は不合格になる可能性が高いからな

スポンサーリンク

 

・アルゴリズムの問題の種類は大きく分けて3つ

アルゴリズムの問題は大きく分けて3つ。

・プログラムの穴埋め(難易度 低~中)
・途中経過と実行結果を問う問題(難易度 中~高)
・その他の問題(難易度 低~高)

に分けられます。

 

ちなみに問題の出題率についてですが、
平成21春期から平成30秋期までのアルゴリズムの問題(127問)を調べたところ、
プログラムの穴埋めに関しては、46問

プログラムの処理における途中経過と実行結果内容に関する問題は、42問出題されました。

どちらも高確率で出題される内容であるため、
アルゴリズムを勉強するならば、途中経過と実行結果の内容、
そしてプログラムの穴埋めを重点的に考えるようにしましょう。

 

では、問題の種類における特徴や内容の解説をしていきます。

 

・プログラムの穴埋め(難易度 低~中)

プログラムの穴埋めに関しては、以下のような形で問題が出題されます。

■ i > 0
|▲「    a    」
||・data(i)
||・i ← i – 1
|――――――
||「    b    」
||・break
|▼

問1.aとbに当てはまるプログラムを選択肢の中から選べ。

 

ちなみに当てはめる内容についてですが、

・処理
・条件式

といった内容が用意されています。

また複数の処理や条件式を丸ごと当てはめる
といった選択肢も出題されるため注意しておきましょう。

 

ちなみに問題の難易度について少し補足しておくと、
「プログラムの穴埋め」という問題は、
アルゴリズムで出題される問題の中では、簡単な部類に入ります。

しかしうっかりミスが発生しやすいといった特徴もあるため、
慎重にプログラムを読み進める必要があるでしょう。

 

 ※プログラムの穴埋めは間違えないように慎重に答える

「プログラムの穴埋め」における注意点として、
「プログラムの穴埋め」はできる限り間違えてはいけない
という点を頭に入れておいてください。

何故「プログラムの穴埋め」を間違えてはいけないか?

それはアルゴリズムという分野では、
受験生自ら穴埋めをしたプログラムをそのまま流用して次の問題に進むからです。

 

つまりプログラムを穴埋めをした問題を間違えていると、
間接的に「途中経過や実行結果を問う問題」を間違える可能性が高くなります。

だからこそ「プログラムの穴埋め」を答える際には、
うっかりミスをなくすように、慎重に答えるようにしましょう。

 

・途中経過と実行結果を問う問題(難易度 中~高)

「途中経過と実行結果を問う問題」において、問題となる要素は以下の通りです。

・変数の内容
・配列の内容
・実行結果によるデータや値

箇条書きにした要素だけを見ると単純そうですが、
実のところ「途中経過と実行結果を問う問題」というのは、
アルゴリズムの中でもそこそこ難しい問題に分類できます。

 

何故「途中経過と実行結果を問う問題」が、そこそこ難しいのか?

それはデータや処理を正しく追う必要があるため、
カンや予測で答えにくく時間が掛かりやすいという点によるところが大きいと言えるでしょう。

そのため「途中経過と実行結果を問う問題」を正しく答えられるようにするには、
プログラムを読んだ経験プログラムを正しく読むといった要素が重要と言えます。

 

またプログラムを正しく追うために、変数や配列の要素を書き出すといった勉強も必要です。

だからこそアルゴリズムの勉強を進める際には、
1つ1つの処理を追うという感覚を重視して勉強をしてください。

 

・途中経過と実行結果を問う問題の出題例
 ・平成30年秋期
 ・平成29年秋期
 ・平成29年春期

 

・その他の問題(難易度 低~高)

アルゴリズムで出題される問題の中には、以下のような問題も出題されます。

・プログラムにおける特定の処理が何回実行されたか?
・プログラムは何回実行されるか?
・プログラムの処理量は?
・メモリの使用量は?
・プログラムにおいてエラーが起こる原因は?

上記の中で特に注意したいのは、
プログラムにおける特定の処理が何回実行されたか?」
「プログラムは何回実行されるか?
といった問題です。

この実行回数を問う問題は、
その他とした問題の中でも出題率が高いといった特徴があります。

 

また「その他の問題」は、
基本的にどの問題もプログラムを読み切ったという前提で出題されるような問題が多いため、
全体的に難易度が高いのも注意するべきポイントと言えるでしょう。

 

・その他の問題の出題例
 ・平成27秋期 設問2(特定の処理の実行回数)
 ・平成24秋期 「d」 (メモリの使用量)
 ・平成21春期 「e」「f」(エラーが起こる原因)

 

シロ
シロ

基本的にアルゴリズムの問題は、
以下のような形で問題が進んでいくよ

「プログラムの穴埋め」
     ↓
「途中経過と実行結果を問う問題」
     or
「その他の問題」
チョコ
チョコ

そして問題の難易度は、
後に出題される問題の方が難しくできている。
だからこそ「プログラムの穴埋め」は、
できる限り間違えないように気をつけたいな

スポンサーリンク

 

・問題へのアプローチについて

では問題の種類をおさらいしたところで、
問題に答える際の解答方法や問題へのアプローチについて解説します。

基本情報技術者試験のアルゴリズムの問題を解く方法は、
以下の4つがメインになります。

・データを当てはめて処理を追う
・説明文の機能をプログラムに当てはめて、処理だけを追う
・有り得ない解答を削る
・当てはめるデータを変えてみる

どの解き方もアルゴリズムにおいて有効なアプローチではありますが、
注意しなければいけないのは、
解答方法によって確実性や解く時間に違いが出てくるといった点です。

 

具体的に解答方法を確実性や解答に掛かる時間で分けてみると、

データを当てはめて処理を追う
 確実性 高
 解答に掛かる時間 多
説明文の機能をプログラムに当てはめて、処理だけを追う
 確実性 中
 解答に掛かる時間 中
有り得ない解答を削る
 確実性 低
 解答に掛かる時間 短
当てはめるデータを変えてみる
 確実性 中
 解答に掛かる時間 短

※どうしても解けない問題に使うと、光明が見えてくる可能性アリ

といった具合です。

では1つ1つ解答方法を解説していきます。

 

・データを当てはめて処理を追う

アルゴリズムの問題を解く上で、一番確実で正答率が高くなる方法は、
「データを当てはめて処理を追う」という方法です。

なぜ「データを当てはめて処理を追う」という方法が、
確実性が高いかというと、理由は単純。

データを当てはめてプログラムを正しく処理できれば、
実際にパソコン上でプログラムを動かしているのと同様の結果が得られるからです。

あくまでもプログラムを正しく追えるという前提が必要になりますが、
頭の中で処理だけを考えるより、遥かに確実性が高い方法と言えるでしょう。

 

ただし「データを当てはめて処理を追う」という方法は、
時間が掛かる解答方法でもあります。

そのため「データを当てはめて処理を追う」を使う場合は、
予め色々なプログラムを読んで、
プログラムを読むという経験を積んでおく必要があるでしょう。

 

ちなみに「データを当てはめて処理を追う」という方法を利用する際には、
プログラムに当てはめるデータや変数を逐一紙に書き出す
というポイントを忘れないようにしてください。

頭の中でデータを当てはめて処理を追うという方法をしてしまうと、
アルゴリズムに余程慣れていない限り、確実性が落ちるため注意が必要です。

スポンサーリンク

 

・説明文の機能をプログラムに当てはめて、処理だけを追う

「説明文の機能をプログラムに当てはめて、処理だけを追う」という方法は、

・データが当てはめられないから(面倒だから)プログラムだけを読む
・時間が無いからプログラムだけを読む

といった状況の時に、やってしまいがちな方法です。

またプログラムの流れを確認できないまま解答が進むため、
確実性は落ちる方法となっています。

 

ただしデータを当てはめてみる方法と比較すると、
プログラムを読む部分は限定されて、データを追う必要もないため時間は掛かりません

そのため時間はないけど、
少しでも確実性のある方法で解答したいといった時に、
「説明文の機能をプログラムに当てはめて、処理だけを追う」という方法を使うと良いでしょう。

 

ちなみに「データを当てはめて処理を追う」という方法を使う際には、
次に解説する「有り得ない解答を削る」と組み合わせて、確実性を高めてください

時間が無い状態だとしても、
100点中25点という配点の問題を確実性の低い方法だけで解答するのは、
自殺行為に等しいため注意が必要です。

 

・有り得ない解答を削る

「有り得ない解答を削る」という方法は、
問題の解き方がまるで分らない時に有効な方法と言えます。

また選択肢を削る意味合いもあるため、

このくらいの値になるだろうけど、
計算式がうまく立てられないな

といった状況の時に、答えを推測するのに使えるでしょう。

他にも問題への解答時間を減らすという意味合いでも、
重要度が高い解答方法だと言えます。

 

ただ「有り得ない解答を削る」という方法は、
あくまでも他の解答方法の補助として使うべき方法であり、
答えが分からない時の最終手段として活用した方が良いでしょう。

そのため試験勉強をしている時から
「有り得ない解答を削る」という方法に頼るのは間違っています。

できる限り自力で解いて、悩みに悩み抜いてから使う方法だと覚えておきましょう。

 

・当てはめるデータを変えてみる

プログラムの処理が、
どれだけ考えても訳が分からない・・・

そんな時は視点を変えて、
当てはめるデータを変更してみるという方法を使うと良いでしょう。

というのも、試験で出題される問題の中には、
エラーデータを想定して作られているプログラムもあります。

そのため単純に正常終了するデータを当てはめているだけだと、
正しい解答に辿り着けないパターンもあるため注意しましょう。

 

ちなみに「当てはめるデータを変えてみる」という方法の優先順位はかなり低めです。

何故ならばエラーデータを想定した問題は、出題率が低いから。

また下手に「当てはめるデータを変えてみる」という解き方を使うと、
時間を浪費する可能性もあるため注意しましょう。

 

チョコ
チョコ

アルゴリズムの問題を解く際には、
できる限り「データを当てはめて処理を追う」
という方法を使うようにしよう。

シロ
シロ

データをキッチリ当てはめて処理を追わないと、
実力が付かないのがアルゴリズムの特徴だと言えるからね

チョコ
チョコ

地道な努力が物を言う、小手先の技術は通用しにくい。
だからこそアルゴリズムは難しいのかも知れないな

スポンサーリンク

 

まとめ

今回は、アルゴリズムにおける問題の種類と問題へのアプローチについて解説しました。

・問題の種類は大きく分けて3つ
 -プログラムの穴埋め(難易度 低~中)
  ※プログラムの穴埋めは、他の問題への影響を考えて慎重に答える
 -途中経過と実行結果を問う問題(難易度 中~高)
 -その他の問題(難易度 低~高)
・問題へのアプローチの種類
 -データを流してみる
 -説明文の機能をプログラムに当てはめる
 -有り得ない解答を削る
 -当てはめるデータを変えてみる

 

それでは次にアルゴリズムの問題を効率よく解くためのコツ、
正確に解くためのポイントをチェックしていきましょう。

基本情報 アルゴリズムを解くための"コツ"についてPart.2
こちらでは基本情報技術者試験のアルゴリズムを解くためのコツについて解説しています。また問題を解く際の手順も解説しているため、是非とも参考にしてください。

コメント