[基本情報技術者試験]アルゴリズムとデータ構造は難しい?捨てる事はできる?

2021年1月1日

基本情報技術者試験の午後試験の必修科目の一つに、アルゴリズムとデータ構造があります。

この科目は特にプログラミング的思考が苦手な方には難しく、大きな壁となっています。

その結果

ラク
ラク
俺はこの科目を完全に捨てる

と、捨てて別科目を頑張って点を稼ごうとする人もよく見られます。

しかし、このアルゴリズムとデータ構造を捨ててしまうとどうなるかについて見てみましょう。

基本情報のアルゴリズム問題について

そもそも、基本情報のアルゴリズム問題はどのような傾向なのか、難しいのかどうかについて見てみましょう。

傾向

基本情報のアルゴリズム問題の傾向は以下のようになっています。

まず出題傾向を見てみましょう。過去10回分は以下のような内容になっています。

年度 内容
R1秋期 Bitap法を用いた文字列探索
H31春期 ハフマン符号化を用いた文字列圧縮
H30秋期 整数式を受け取って値を返すプログラム
H30春期 ヒープソート
H29秋期 文字列の誤り検出
H29春期 最短経路探索問題
H28秋期 編集処理
H28春期 メモ帳機能
H27秋期 BM法を用いた文字列探索
H27春期 クイックソート

このように文字列を操作したり順番を入れ替えたりといった処理が多くなっています。

例題

アルゴリズムの問題は人によって受け取り方は違うものの、具体的な問題を1つ見て見るとどのような感じかわかるかなと思います。

今回は令和元年度秋の問題を一部抜粋して引用してみました。

次のプログラムの説明及びプログラムを読んで,設問1~3に答えよ。

〔プログラムの説明〕
関数 BitapMatch は,Bitap法を使って文字列検索を行うプログラムである。
Bitap法は,検索対象の文字列(以下,対象文字列という)と検索文字列の照合に,個別の文字ごとに定義されるビット列を用いるという特徴をもつ。
なお,本問では,例えば2進数の16ビット論理型の定数 0000000000010101 は,上位の0を省略して"10101″Bと表記する。

(1)関数 BitapMatch は,対象文字列を Text[] に,検索文字列を Pat[] に格納して呼び出す。配列の要素番号は1から始まり,Text[] のi番目の文字は Text[i] と表記する。Pat[] についても同様にi番目の文字は  Pat[i] と表記する。対象文字列と検索文字列は,英大文字で構成され,いずれも最長16文字とする。
対象文字列 Text[] が"AACBBAACABABAB",検索文字列 Pat[] が"ACABAB"の場合の格納例を,図1に示す。

(2)関数 BitapMatch は,関数 GenerateBitMask を呼び出す。
関数 GenerateBitMask は,文字"A"~"Z"の文字ごとに,検索文字列に応じたビット列(以下,ビットマスクという)を生成し,要素数26の16ビット論理型配列 Mask[] に格納する。Mask[1] には文字"A"に対するビットマスクを,Mask[2] には文字"B"に対するビットマスクを格納する。このように Mask[1]~Mask[26] に文字"A"~"Z"に対応するビットマスクを格納する。
関数 GenerateBitMask は,Mask[] の全ての要素を"0″Bに初期化した後,1以上で Pat[] の文字数以下の全てのiに対して,Pat[i] の文字に対応する Mask[] の要素である Mask[Index(Pat[i])] に格納されている値の,下位から数えてi番目のビットの値を1にする。
関数 Index は,引数にアルファベット順でn番目の英大文字を設定して呼び出すと,整数n(1≦n≦26)を返す。

(3)図1で示した,Pat[] が"ACABAB"の例の場合,関数 GenerateBitMask を実行すると,Mask[] は図2のとおりになる。

(4)関数 GenerateBitMask の引数と返却値の仕様は,表1のとおりである。

設問1 プログラムの説明およびプログラム1中の□に入れる正しい答えを、解答群の中から選べ

aに関する解答群
ア:0000000000000101  イ:0000000000101000
ウ:0001010000000000  エ:1010000000000000

bに関する解答群
ア:"0″B
イ:"1″B
ウ:"1″BをPatLenビットだけ論理左シフトした値
エ:"1″Bを(PatLen-1)ビットだけ論理左シフトした値
オ:"1111111111111111″B

cに関する解答群
ア:"1″Bを(i-1)ビットだけ論理左シフトした値
イ:"1″Bをiビットだけ論理左シフトした値
ウ:"1″Bを(PatLen-1)ビットだけ論理左シフトした値
エ:"1″BをPatLen ビットだけ論理左シフトした値
オ:"1″B

〔関数 BitapMatch の説明〕

(1)Text[] と Pat[] を受け取り,Text[] の要素番号の小さい方から Pat[] と一致する文字列を検索し,見つかった場合は,一致した文字列の先頭の文字に対応する Text[] の要素の要素番号を返し,見つからなかった場合は,-1を返す。
(2)図1の例では,Text[7]~Text[12] の文字列が Pat[] と一致するので,7を返す。
(3)関数 BitapMatch の引数と返却値の仕様は,表2のとおりである。

引用元:https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2019h31_2/2019r01a_fe_pm_qs.pdf

疑似コードの読解が難しい

問題を見てぱっと目に入るのが疑似コードと呼ばれる■や▲を用いたプログラミングコードのようなものではないでしょうか。

これらは独特の処理になり、通常のプログラミング言語とは別として覚えておかなければいけません。

複雑な処理が多く頭で追って言っても途中で分からなくなり挫折するパターンが良く見られます

加えてビットの論理処理や配列なども出てくるため、コンピュータ内のCPUの処理が頭に入っていないと全く解けないことも多々あります。

カズ
カズ
問題文をしっかり読んでもわけわかんない・・・

これがアルゴリズムが難解だと言える理由です。

スポンサーリンク

基本情報のアルゴリズムを捨てるとどうなる?

疑問

それでは、このアルゴリズムが難しいからと言って捨ててしまうとどうなるでしょうか。

25点を失う

まず、アルゴリズムとデータ構造の配点を見てみましょう。

分野 選択方法 配点
1 情報セキュリティ 必須 20点
2~4 ソフトウェア・ハードウェア
データベース
ネットワーク
2~5の中から2問 15点
5 プロジェクトマネジメント
サービスマネジメント
システム戦略
経営戦略
企業と法務
15点
6 データ構造とアルゴリズム 必須 25点
7~11 ソフトウェア開発(C言語、Java、Python、アセンブラ、表計算) 7~11の中から1問 25点

令和2年度より配点基準が変わり、データ構造とアルゴリズムは25点満点となっています。

このため、100点満点の試験が75点満点の試験となり、そのうち60点以上を取る必要が出てきます。

残り15点しか落とせないので非常に難しいですね。

プログラミングで高得点を取らなければいけなくなる

アルゴリズム問題と同じ25点の配点があるソフトウェア開発(プログラミング)でも、最低で15点以上取る必要が出てきます。

ただ、このプログラミングも基本的な考え方はアルゴリズムと同じで、アルゴリズムが苦手、という方は大抵プログラミングも苦手です。

その結果、両方取れなくて詰むパターンが非常に多いです。

もちろんそれ以外の科目も高得点を狙わなければいけない

もちろん、アルゴリズムやプログラミング以外の科目でも高得点を狙う必要が出てきます。

例えばセキュリティやネットワーク、データベースなどのテクノロジ系科目はほぼ100%正解できるようにしておかなければいけません

テクノロジ系科目は決して難しくはありませんが、100%を取るとなると話は変わってきます。

勉強時間も従来の150時間~200時間よりかかる事を覚悟しておいた方が良いでしょう。

カズ
カズ
素直にアルゴリズムの勉強しておいた方が良さそうだね

アルゴリズムを対策するために

力

では具体的にアルゴリズム問題を解けるようにするにはどうすれば良いでしょうか。

具体的な3つの方法をご紹介します。

ソフトウェア開発と並行して学習する

まず一つ目が、選択必修科目であるソフトウェア開発(7~11問目)と同時に対策することです。

先ほども少し触れましたが、アルゴリズムとデータ構造及び、ソフトウェア開発では共にプログラミング的思考が問われ、片方が対策できればもう片方もそれなりに理解できます。

なので、ソフトウェア開発の問題を解きながら、これは疑似コードだとこのように書くんだな、と頭の中で置き換えたりしながら学習を進めていくと良いでしょう。

ソフトウェア開発(プログラミング)の対策記事は以下にまとめているので、こちらも併せてご覧ください。

カズ
カズ
逆にプログラミング関係の問題が得意になれば、それだけで半分得点できるわけだから試験が一気に簡単になるよ!

スクールを利用する

プログラミング・アルゴリズム以外の分野は意外と独学でも通用しますが、逆にこの2つの科目は独学では難しい場合があります。

そんなときの対策の一つとしてスクール・通信講座の利用をオススメします。

スクールでは講師の方に直接質問を投げることで具体的な解説をしてもらうことができて、最後まで「分からない状態」を残さずに済みます

筆者の中では特にスタディングがサポート制度も手厚く、コスパも良いのでオススメです。

STUDYing 可能性を実現に

もちろん、午後試験に対しても対策講座が作りこまれておりアルゴリズムやプログラミングも効率よく学習できますよ♪

STUDYingのレビュー記事もあるので、併せてご覧ください。

応用情報に逃げる

意外!と思われるかもしれませんが、応用情報技術者試験に逃げるのも一つの手です。

ラク
ラク
でも基本ができなくて応用が出来るのか?

確かに、応用情報技術者試験は基本情報より遥かに難しい試験とされています。

しかし、応用情報技術者試験の大きな特徴としてプログラミングを避けることができます

このことにより、記述さえ対策してしまえば応用情報の方がすんなりと合格出来てしまう事もあります。

筆者自身、プログラミングが苦手で応用から挑んで先に合格してしまった経験があるのでお勧めです。

カズ
カズ
職場の評価でも基本情報よりは応用情報の方が高いから、出世や昇進条件の基本情報が突破できなくて困ってる人にもオススメ!

基本情報技術者試験のアルゴリズム・まとめ

今回は基本情報技術者試験のアルゴリズム問題について、難しいのかどうかと言ったポイントと、捨てたらどうなるの?と言った疑問にお答えしました。

答えとしては「しっかり対策する」のが王道パターンで、そのためにしっかりと対策を練ったりスクールを選んだりして早め早めの内に苦手意識を拭い去ることをオススメしています。

また、基本情報技術者試験を飛ばして応用情報技術者試験にチャレンジするのも大いにアリなので、早めに見切りをつけて応用情報にシフトするのも賢明かもしれません。

キュー
キュー
社内規定で基本情報を絶対取得しないといけない!って場合もあるから、一応飛ばして良いかどうかは事前に要チェックやで!
スポンサーリンク