「情報処理試験のアルゴリズムって具体的にどう勉強したらいいの?」
という疑問に答えます。

アルゴリズムは過去問や参考書だけ読んで理解しようと思っても難しいです。
言語はなんでもいいのでまずはプログラムを実際に作ってみましょう。

本記事ではPythonを例にしてアルゴリズムの問題を解く例を紹介します。

具体的には以下の通りです。

・アルゴリズムを勉強のために最低限必要なPythonの知識
・アルゴリズムの問題をPythonで実践する手順

アルゴリズムを勉強のために最低限必要なPythonの知識

知識
Pythonでアルゴリズムを勉強する場合以下について最低でも理解しておく必要があります。

・条件分岐
・繰り返し文
・変数・関数の使い方

いずれもそれほど難しいものではありません。参考書や公式ドキュメントを読みつつプログラムをいくつか作ればすぐに理解できると思います。
問題によっては上記以外の知識も必要になるため、都度ググるようにしましょう。

◆条件分岐
条件分岐は特定の条件に当てはまった場合の処理です。
とりあえずif・elseif・elseの使い方を覚えればOK。

◆繰り返し文
指定した回数同じ処理を繰り返す構文です。
for文の使い方について理解しておきましょう。

◆変数・関数の使い方
代入・定義・呼び出し方・リターン値などについて理解しておけばOKです。

アルゴリズムの問題をPythonで実践する手順

記述
基本情報処理技術者の過去問の実践手順について説明します。

・使用するアルゴリズム
・プログラムを実際に動かしてみよう
・実際に問題を解くときは?

の順に説明します。

使用するアルゴリズム

上記は2019年10月基本情報処理技術者の問8の「GeneralBitMask」というアルゴリズムです。

問題の詳細はこちら

このアルゴリズムをPythonにおこしていきます。

アルゴリズムをプログラムに起こしていくと、
・論理和ってなに?
・Pythonで論理シフトってどうやるの?

といった疑問が出てくると思います。
疑問が出てきた場合はすぐにググって調べましょう。

例)
・論理が何かわからない→「論理和とは」でググる
・Pythonの論理シフトの記述方法がわからない→「python 論理シフト」でググる

記述例は以下の通り。

記述はできるだけ問題文に合わせる形で作っています。
・問題のプログラムとは別にindex関数を作成
・空欄の部分はとりあえず「answer_b」,「answer_c」で記述
・文字列のインデックスは、Pythonの場合0、問題文の場合1で始まるため、ソースコード中には以下の処理を追加しています。

# 設問のために調整
pat = ‘0’ + pat

patの’0ABCD’のようになります。
‘0’の部分は参照されません。

プログラムを実際に動かしてみよう

早速プログラムを動かしてみましょう。正解の選択肢だけでなく不正解の選択肢も動かしてみます。
とはいえ空欄が2つあるのでb,cを同時に試そうと思うとかなりパターンが多くなります。

予め片方に正解を入れて1問ずつ実行しましょう。

「正解をいれてしまったら解く力がつかないんじゃないか」

と思うかもしれませんが、最初は問題を解くことよりも「選択肢の違いによって結果がどう変わるのか」という点を理解することが大事です。

問題を解く力はその後つけても遅くはありません。

まずはCを埋めてのBの選択肢をそれぞれ実行します。

選択肢は以下の通り。
ア:”0″B
イ:”1″B
ウ:”1″BをPatLenビットだけ論理左シフトした値
エ:”1″BをPatLen-1ビットだけ論理左シフトした値
オ:”1111111111111111″B

実行結果は以下の通り。


0b10101,0b101000,0b10,0b0,0b0・・・・・

0b10101,0b101001,0b11,0b1,0b1・・・・・

0b110101,0b101000,0b100010,0b100000・・・・

0b1010101,0b1101000,0b1000010,0b1000000・・・・

0b1111111111111111,0b1111111111111111,0b1111111111111111,0b1111111111111111・・・・

問題文中に「ACABAB」で実行した場合のA、C、Dの値が出ているのでこれと比較しましょう。

アが正しい値ですね。
イの場合、Aは合っていますがB以降が違います。
ウ〜オはAからして違います。

よって「ア」が正解です。

次にBを埋めて実行します。

選択肢は以下の通り。

ア:”1″Bを(i-1)ビットだけ論理左シフトした値
イ:”1″Bをiビットだけ論理左シフトした値
ウ:”1″BをPatLen-1ビットだけ論理左シフトした値
エ:”1″BをPatLenビットだけ論理左シフトした値
オ:”1″B

実行例は以下の通りです。


0b10101,0b101000,0b10,0b0・・・・

0b101010,0b1010000,0b100,0b0・・・・

0b100000,0b100000,0b100000,0b0・・・・

0b1000000,0b1000000,0b1000000,0b0・・・・

0b1,0b1,0b1,0b0・・・・

こちらも問題文と比較すれば一目瞭然でアが正しい値です。

試験で問題を解くときは?

情報処理試験ではパソコンどころかノートもスマホも使えないので机上で追うしかありません。
しかし、複数の空欄がある場合少なくとも一つは問題文中にヒントがあります。

例えば上記問題の場合、ありがたいことに問題文中に「”0″Bで初期化」と書いてあるので「ア」確定ですね。

上記のように試験の場合は問題文を読んで選択肢にあたりをつけてからトレースするのがおすすめです。
問題文を読んだだけで回答が全てわかった場合でも確認のためトレースはしておきましょう。

終わりに

アルゴリズムは参考書を読んだり過去問を解いたりするだけで理解するのは難しいです。
言語は何でも良いので作って動かしてみましょう。

今回はPythonで作成する例を紹介しました。
Pythonは初心者でも取り組みやすいので、これからアルゴリズムの勉強を始める方はPythonで始めるのがおすすめです。

関連記事>>Pythonプログラミングの始め方まとめ
関連記事>>アルゴリズムの勉強方法〜基本情報処理技術者試験対策〜

基本情報処理技術者まとめ>>基本情報処理技術者(FE)の対策まとめ