基本情報技術者資格

【科目B】基本情報技術者試験のアルゴリズムの勉強法【初心者向け】

*本サイトはアフィリエイト広告を利用しています。


このブログは資格勉強をテーマにお役立ち情報を紹介しています。

アルゴリズムが難しすぎる。

どんな勉強を行えばよい?

このような疑問にお答えすべく、アルゴリズムの勉強法についてまとめました。

科目Bはアルゴリズムとプログラミングだけで配点の8割を占めますので、しっかりと対策を行いましょう。

この記事で分かること
  • 初心者に難しい理由
  • アルゴリズムの出題範囲
  • 初心者のおすすめの勉強方法
◆基本情報技術者試験の勉強をこれからはじめる方に
合格までに必要な情報を下記の記事にまとめていますので、合わせてご確認ください。
》基本情報技術者試験の合格に向けた完全マップ

アルゴリズムが初心者にとって難しい理由

  • 抽象的で理解しにくい
  • 複雑で細かい手順が多い
  • 経験が不足している

抽象的で理解しにくい

アルゴリズムは手続きや手順を記述するものであり、その内容は非常に抽象的です。抽象的な表現や数式などは、初心者にとっては理解するのが難しいです。

複雑で細かい手順が多い

アルゴリズムには、インプットと途中経過とアウトプットがあり、初期値やifループなどの条件により複雑なルートをたどります。それぞれのルートは正確に把握して計算しないといけないので、初心者にとっては、これらを理解することが困難であり、アルゴリズム自体が難しく感じられます。

経験が不足している

アルゴリズムは、多くの場合、実際の問題に対する解決策を提供するために使われます。初心者にとっては、問題に対する理解や経験が不足しているため、アルゴリズムの選択や設計が難しく感じられることがあります。

if/elseとかorとか…
ややこしい

アルゴリズムの問題の出題範囲について

  1. データ構造
  2. 流れ図
  3. 整列・併合・探索のアルゴリズム
  4. 再帰のアルゴリズム
  5. グラフのアルゴリズム
  6. 文字列処理のアルゴリズム
  7. ファイル処理のアルゴリズム
  8. アルゴリズムの設計

アルゴリズムの問題は上記8つから問題が出題されます。

1. データ構造

配列/リスト/スタック/キュー/木構造の考え方や、基本的な操作を問われる問題が出題されます。すべての構文やルールを覚えておく必要があります。

用語例:
(配列)多次元配列、静的配列、動的配列
(リスト)線形リスト,単方向リスト,双方向リスト,環状リスト
(スタックとキュー)FIFO、LIFO、プッシュ、ポップ
(木構造)根,葉,枝,2 分木,完全 2 分木,バランス木,順序木,多分木,探索木,2 分探索木,深さ優先探索,幅優先探索,先行順,後行順,中間順

  • 多次元配列とは、1次元配列を複数重ねて作成したもので、表のような構造を持つ配列です。例えば、2次元配列は表や行列のような構造を持ち、3次元配列は立体的な構造を持ちます。
  • 静的配列とは、要素の数が決まっている場合に使う配列です。要素数は後から変更できず、宣言時に確保されたメモリ領域が固定され、高速に要素にアクセスできます。
  • 動的配列とは、要素の数が決まっていない場合に使う配列です。要素の数に応じて追加・削除されます。動的配列は、ヒープ領域にメモリを確保するため、メモリ使用量が多いです。
  • 線形リストとは、ノード(プログラムの動作を線と点で繋げもの)が次のノードに一方向に連結したリストで、先頭とラストが存在するものです。
  • 単方向リストは、線形リストの一種で、先頭から順番にアクセスすることはできますが、逆方向へのアクセスはできません。
  • 双方向リストは、各ノードが前後のノードを指すポインタを持つことにより、両方向に連結されたリストです。線形リストとは異なり、逆方向へのアクセスが可能です。
  • 環状リストは、双方向リストと似ていますが、最後のノードが先頭ノードを指すことで、循環するような構造を持ちます。
  • FIFO (First-In-First-Out)は、最初に入れたデータが最初に出てくるように処理するデータ構造です。キュー (queue) として知られており、待ち行列のようなイメージです。新しい要素は常に最後尾に追加され、先頭の要素から順番に処理されます。
  • LIFO (Last-In-First-Out)は、最後に入れたデータが最初に出てくるように処理するデータ構造です。スタック (stack) として知られており、積み上げた本のようなイメージです。新しい要素は常に先頭に追加され、先頭の要素が取り出されます。
  • プッシュ (push)は、新しい要素をデータ構造に追加する操作です。FIFO では、新しい要素は常に最後尾に追加されます。LIFO では、新しい要素は常に先頭に追加されます。
  • ポップ (pop)は、データ構造から要素を取り出す操作です。FIFO では、先頭の要素が取り出されます。LIFO では、先頭の要素が取り出されます。取り出した要素は、データ構造から削除されます。
  • 根 (root)は木構造において最上位のノードであり、他の全てのノードを親に持つノードを指します。
  • 葉 (leaf)は木構造において、子を持たない末端のノードを指します。
  • 枝 (branch)は木構造において、親と子をつなぐエッジを指します。
  • 2 分木 (binary tree) 全てのノードが2つ以下の子ノードを持つ木構造を指します。
  • 完全 2 分木 (complete binary tree) 2 分木であり、すべての葉ノードが同じ深さにある木構造を指します。
  • バランス木 (balanced tree) ノードの高さの差が、最大でも1である2分木のことを指します。
  • 順序木 (ordered tree) 親ノードと子ノードの大小関係がある木構造を指します。
  • 多分木 (multiway tree) 1つ以上の子ノードを持つノードがある木構造を指します。
  • 探索木 (search tree) 順序木の一種であり、特定の値を高速に検索できるようにデザインされた木構造を指します。
  • 2 分探索木 (binary search tree) 2 分木であり、探索木の一種である木構造を指します。
  • 深さ優先探索 (depth-first search) 木構造の探索アルゴリズムの一つであり、根から一つの子ノードを選択して、その子ノードに移動して再帰的に探索を行う方法を指します。
  • 幅優先探索 (breadth-first search) 木構造の探索アルゴリズムの一つであり、根から始まり、同じ深さのノードを全て探索してから、次の深さのノードを探索する方法を指します。
  • 先行順 (pre-order traversal) 木構造の探索アルゴリズムの一つであり、根を先に訪れ、左の子ノードを訪れ、右の子ノードを訪れる方法を指します。
  • 後行順 (post-order traversal) 木構造の探索アルゴリズムの一つであり、左の子ノードを訪れ、右の子ノードを訪れ、最後に根を訪れる方法を指します。
  • 中間順 (in-order traversal) 木構造の探索アルゴリズムの一つ

2. 流れ図

流れ図(フローチャート)はプログラムのアルゴリズムを図示するためのグラフィカルな表現方法の一つです。流れ図の考え方、記号、順次、判定、繰返しなど処理手順の表現方法を理解しているかが問われます。

用語例:端子、処理、定義済み処理、判断、ループ端、データ、線

  • 端子 (terminator) 開始や終了を表す図形で、流れ図の最初と最後に配置されます。
  • 処理 (process) 実行する処理を表す図形で、矩形の形をしています。例えば、計算やデータの加工などがあります。
  • 定義済み処理 (predefined process) 処理の中でも、あらかじめ定義された処理を表す図形で、矩形に2本の線を引いた形をしています。例えば、関数呼び出しなどがあります。
  • 判断 (decision) 条件分岐を表す図形で、菱形の形をしています。例えば、if文やswitch文などがあります。
  • ループ端 (loop limit) 反復処理を表す図形で、矩形に点線の枠を付けた形をしています。例えば、for文やwhile文などがあります。
  • データ (data) 変数や定数を表す図形で、矩形に丸みを付けた形をしています。
  • 線 (line) 各要素を結ぶ線で、流れの順序やデータの流れを表します。例えば、処理の前後の順序や、条件分岐の結果によって分岐する流れなどを表します。また、矢印を付けて、どちらに向かって流れが進むかを表します。

Regenerate response

3. 整列・併合・探索のアルゴリズム

整列 (sorting)、併合 (merging)、探索 (searching)の基礎を問われる問題が良く出題されます。整列は数値の昇順降順など、ある基準に従って順序付けるものです。併合は、複数の配列やデータをひとつにまとめるものです。探索は、与えられたデータから、目的のデータを探し出すものです。

用語例:選択ソート、バブルソート、マージソート、挿入ソート、シェルソート、クイックソート、ヒープソート、線形探索法、2 分探索法、ハッシュ表探索法

  • 選択ソート (Selection sort) 配列の最小値を探索し、それを先頭の要素と交換することを繰り返して整列するアルゴリズムです。
  • バブルソート (Bubble sort) 隣り合った2つの要素を比較し、必要に応じて交換することを繰り返して整列するアルゴリズムです。
  • マージソート (Merge sort) 配列を分割し、分割した配列を再帰的にマージして整列するアルゴリズムです。
  • 挿入ソート (Insertion sort) 配列を前から順番に、すでに整列された部分に挿入していくアルゴリズムです。
  • シェルソート (Shell sort) 挿入ソートの拡張版で、間隔を設けて挿入ソートを行い、間隔を徐々に狭めていくアルゴリズムです。
  • クイックソート (Quick sort) 枢軸要素を選び、その値より小さい要素と大きい要素に分割して再帰的に整列するアルゴリズムです。
  • ヒープソート (Heap sort) 完全二分木の性質を利用して、ヒープと呼ばれるデータ構造を作成し、その順序に従って整列するアルゴリズムです。
  • 線形探索法 (Linear search) 先頭から順番にデータを探索して目的のデータを探し出すアルゴリズムです。
  • 2分探索法とは、昇順または降順にソートされた配列やリストから、目的の値を効率的に探し出すアルゴリズムです。
  • ハッシュ表探索法とは、ハッシュ関数を用いてデータを格納し、効率的に検索を行うアルゴリズムです。

4. 再帰のアルゴリズム

再帰のアルゴリズムとは、ある関数が自身の中で自分自身を呼び出すことによって実現されるアルゴリズムです。階乗計算、フィボナッチ数列の計算、二分木の探索などがあります。問題の構造に合わせて、シンプルな実装を行えます。

5. グラフのアルゴリズム

グラフとは、頂点(ノード)と辺(エッジ)からなるデータ構造であり、深さ優先探索や線優先探索など、様々な分野で活用されるアルゴリズムです。

用語例:深さ優先探索、幅優先探索、最短経路探索

  1. 深さ優先探索(DFS) ある頂点から始まり、その頂点から到達可能なすべての頂点を探索するアルゴリズムです。深さ優先探索は再帰的な実装が可能で、スタックを使用して実装することもできます。
  2. 幅優先探索(BFS) ある頂点から始まり、その頂点から1ステップで到達可能なすべての頂点を探索するアルゴリズムです。幅優先探索はキューを使用して実装されます。
  3. 最短経路アルゴリズム ある頂点から別の頂点までの最短経路を求めるアルゴリズムです

6. 文字処理列のアルゴリズム

文字列処理アルゴリズムは、文字列の検索やマッチング、圧縮、暗号化、編集距離の計算など、多くの応用に利用されます。

用語例:文字列照合

文字列照合とは、ある文字列が別の文字列の一部として現れているかどうかを判定する処理です。一般的には、テキストと呼ばれる長い文字列に対して、パターンと呼ばれる短い文字列が現れているかどうかを検索するために使用されます。

例えば、ある文章において「the」や「and」のような単語が含まれているかどうかを検索する場合に文字列照合を利用できます。また、正規表現を用いたパターンマッチングにも応用されます。

文字列照合アルゴリズムには、ブルートフォース法、KMP法、BM法、Rabin-Karp法などがあります。これらのアルゴリズムは、パターンの長さやテキストの長さによって、実行時間が異なります。また、正確性や性能面で異なる特徴を持っています。

7. ファイル処理のアルゴリズム

バッチ処理などで用いる整列処理、併合処理、コントロールブレーク処理、編集処理の基本を理解しているか問われる問題です。

用語例:整列処理、併合処理、コントロールブレーク処理、編集処理

  • 整列処理とは、データをある基準に従って並び替える処理のことを指します。例えば、数値の大小に基づいてデータをソートすることが一般的です。代表的なアルゴリズムには、バブルソート、選択ソート、挿入ソート、クイックソート、マージソート、ヒープソートなどがあります。
  • 併合処理とは、複数のソート済みデータを統合して、新しいソート済みデータを作成する処理のことを指します。代表的なアルゴリズムには、マージソートなどがあります。
  • コントロールブレーク処理とは、ある基準でデータをグループ化する処理のことを指します。例えば、顧客別に売上データを集計する場合、顧客番号を基準にデータをグループ化することがあります。グループ化されたデータに対して、集計処理を行うことができます。
  • 編集処理とは、文字列の加工処理のことを指します。文字列の結合、置換、分割、削除、挿入などの処理があります。例えば、CSVファイルの読み込みにおいて、カンマ区切りの文字列を分割してデータに変換することが編集処理にあたります。また、正規表現を用いた文字列のパターンマッチングも編集処理の一種です。

8. アルゴリズムの設計

アルゴリズムは、擬似言語、流れ図、決定表(デシジョンテーブル)などを用いて表現しており、その基本的な設計方法を理解しているかが問われます。

用語例:再帰、分割統治法

再帰とは、関数や手続きの中で自分自身を呼び出すことで、問題をより小さな問題に分割して解決する手法です。再帰的な処理は、反復的な処理に比べて簡潔かつ自然な表現ができる場合があります。例えば、階乗を求める関数を再帰的に表現することができます。

分割統治法とは、大きな問題をより小さな問題に分割して解決する手法です。問題をより小さな部分に分割し、それぞれを再帰的に解決して最終的な解を得ることができます。分割統治法は、並列処理に向いているため、大きな問題を複数のプロセッサで処理することができます。例えば、マージソートは分割統治法を用いたソートアルゴリズムの一つです。

アルゴリズム難しすぎる…

※アルゴリズムの出題範囲については、IPA公式サイトの最新シラバスにて確認することができます。最新状況は確認しておきましょう。
》最新シラバス(IPA公式サイト)

初心者におすすめの勉強法

基本情報技術者試験のアルゴリズムとプログラミングは、同じ勉強方法で行うことができます。

  1. 基礎ルールを覚える
  2. 自分で簡単なプログラミングを作る
  3. 過去問を解く

1. 基礎ルールを覚える

アルゴリズムの勉強は、まず基礎ルールを覚えるところからはじめましょう。

アルゴリズムの問題は基礎ルールを複雑に組み合わせています。つまり、基礎をしっかり覚えておけば、それを紐解いていけば問題を解くことができます。

基礎ルールの勉強は参考書がおすすめです。

その理由は基本情報技術者試験のアルゴリズムに必要な基礎知識を網羅的に学習できるからです。もし勉強に抜け漏れがあると、アルゴリズムは過去問と同じ問題は出ないので、点数が大幅に下がるリスクが生じてしまいます。参考書で網羅的に基礎から勉強することが合格への近道となります。

・基礎からきっちり学べる
・最新試験の疑似言語に対応している
・易しい表現で書かれている
・レビューや口コミ評価も高い


もし参考書よりも動画&テキストで学習したい方は「資格の大原」がおすすめです。科目Bに特化した講義とテキストが、比較的安い値段で購入できます。

資格の大原は、手厚いサポートと、通学orWeb講義が選べるのと、科目Aの免除制度があることが良いです。

  • 通学コース(科目A免除2回):80,800円
  • Webコース(科目A免除2回):62,000円
  • 科目Bのみ:16,700円

コースによりますが、テキスト、演習ドリル、まとめノート、過去問集と、かなり教材が充実しています。困ったときは教師に質問でき、手厚い保証が心強いです。

科目A試験免除制度は、修了試験を2回チャレンジできます。修了試験に合格すると、試験本番で科目Aを受験しなくてよくなるため、科目Bに集中して学習できるメリットとなります。

また、科目Bだけのコースもあり、値段を抑えることもできます。

無料で資料請求ができますので、気になった方は資料請求から始めましょう。
》資格の大原(資料請求)

資格の大原は、しっかりとしたサポートを受けたいひとにおすすめです。科目A免除試験も2回受けられるので安心です。

2. 自分で簡単なプログラミングを作る

実際に自分で簡単なプログラミングをすると、アルゴリズムの理解度がかなり高まります。

基本情報技術者試験を受験するということは、将来はITエンジニアとして活躍したいと考えていると思います。試験勉強から少し外れてしまいますが、早めにアルゴリズムやプログラミングを経験しておくことは今後にも役立ちます。

プログラミングはPythonが構文が分かりやすいのでおすすめです。

Pythonの勉強はスクールに通うのが一番ですが、もし独学する場合はUdemyがよいです。

Udemy動画で、Pythonのインストールや初期設定などの環境設定、基礎構文、応用例まで、すべてを学習することができます。さらに、現役エンジニアの方が講師なので、現場で通用する構文についても解説してくれるのでとても役立ちます。

Udemy
「現役シリコンバレーエンジニア

が教えるPython 3 入門 」

Pythonは人気のあるプログラミング言語です。資格勉強だけでなく就職後も役立ちます。

Pythonの基礎を学んだら、実際に基本情報技術者試験のアルゴリズムの問題に似たものを自分でプログラミングして動作確認してみましょう。

3. 過去問を解く

過去問道場サイトで、アルゴリズムの過去問をできるだけ多く解きましょう。
》過去問道場サイト

アルゴリズムの問題は、出題方法は無限にあるので、できるだけ多くの問題にふれて解き方を理解しておくことが重要です。

しかし、2023年4月から試験形式が大きく変わったため、まだ過去問は少ないです。現在、科目Bは、IPA公式サイト(情報処理推進機構)のサンプル問題を解くことが大事になります。過去問道場サイトでは、このサンプル問題を解説付きで勉強することができますのですべて解いておきましょう。

アルゴリズムは解説を読むだけでなく、インプットと途中経過とアウトプットの結果を、実際に紙に書き出し、内容を理解しておくことが大事です。

アルゴリズムやプログラミングはすぐには上達しないです。コツコツと積み重ねましょう。

プログラミングを最速マスターしてITエンジニアとして活躍しよう

基本情報技術者試験に合格したら、基礎的なIT知識を所有している証明となります。

IT初心者や未経験者の方はプログラミングも本格的に学習していきましょう。

特に、就職支援、フリーランス支援(副業)が確約されるプログラミングスクール「TechAcademy」で学習するのがおすすめです。

TechAcademy
プログラミング学習を見る

なぜ、独学でなく、プログラミングスクールがおすすめなのかについても下記の記事にまとめていますのでご覧ください。
》プログラミングを最短でマスターして稼ぐ方法

以上となります。少しでも資格勉強の助けになれば幸いです。
ここまで読んで頂きありがとうございました。

》基本情報技術者試験の合格に向けた完全マップ

コメント

タイトルとURLをコピーしました