本文へ移動
合格ノート.
ITパスポート / 基本情報技術者試験
← 合格ノート ホーム
記事内の見出し

体系学習

アルゴリズムとデータ構造の基本

アルゴリズムの考え方と代表的なデータ構造を、処理の流れと用途から理解する。

対象資格:ITパスポート / 基本情報技術者試験
目安時間:30分

このページで理解できること

  • アルゴリズムとデータ構造の関係を説明できる
  • 配列・リスト・スタック・キューの特徴と用途を区別できる
  • 木構造と二分木の基本用語を説明できる
  • 線形探索・二分探索・代表的な整列の考え方を説明できる
  • FEではハッシュ表・木の走査・再帰・グラフ探索の基本を説明できる

ITパスポート:配列・リスト・スタック・キュー・木構造と、探索・整列など代表的なアルゴリズムの基本を補助的に理解する。

基本情報技術者試験:代表的なデータ構造の操作、探索・整列、再帰、木・グラフの探索を科目A/Bにつながる形で理解する。

アルゴリズムは「どの順序で処理するか」、データ構造は「データをどの形で持つか」を決める考え方です。同じ目的でも、データの持ち方と処理手順の組合せによって、実装のしやすさや処理の効率は変わります。このページでは、代表的なデータ構造と探索・整列を一本の流れで整理し、FEでは木・ハッシュ・再帰・グラフ探索までつなげます。

まずは問題を解く流れで捉える

データ処理を考えるときは、先にデータの形、その後に処理方法を選ぶと整理しやすくなります。

  1. 扱うデータを確認する

    件数、順序の有無、重複の有無、追加・削除の頻度などを確認します。

  2. データ構造を選ぶ

    添字で直接扱いたいなら配列、途中の追加・削除を意識するならリスト、後入れ先出しならスタック、先入れ先出しならキューなど、操作に合う形を選びます。

  3. 必要な操作を決める

    探索、追加、削除、並べ替え、巡回など、何を行う必要があるか整理します。

  4. アルゴリズムを選ぶ

    データが整列済みか、探索対象が木やグラフかなどの条件から適切な手順を選びます。

  5. 結果と効率を確認する

    正しい結果になることに加えて、データ量が増えたときに処理や記憶量がどう増えるかも確認します。

1. アルゴリズムとデータ構造はセットで考える

処理手順とデータの持ち方は互いに影響します。

アルゴリズムは、入力から目的の出力を得るための有限の処理手順です。探索、整列、集計など、同じ目的でも複数のアルゴリズムが存在します。

データ構造は、データ同士の関係や操作方法を扱いやすくするための表現方法です。代表例として、配列、リスト、スタック、キュー、木構造などがあります。

例えば二分探索は、単に値が並んでいるだけでは使えません。探索対象がキー順に整列されていることが前提です。このように、アルゴリズムには利用できる条件があります。

  • アルゴリズム = 処理手順
  • データ構造 = データの持ち方・関係の表現
  • アルゴリズムには利用条件がある

2. 配列とリストは「位置」と「つながり」の違いで捉える

配列は添字で要素を扱い、リストは要素同士のつながりで順序を表します。

配列は、複数の要素を並べ、添字を使って特定の要素へアクセスするデータ構造です。要素番号が分かっていれば目的の位置を直接指定しやすい点が特徴です。

リストは、各要素が次の要素などとのつながりを持つことで順序を表します。連結リストでは、要素の挿入や削除時に周囲のリンクを変更して関係をつなぎ替えます。

配列とリストのどちらが常に優れているわけではありません。添字によるアクセスを重視するか、途中への追加・削除を重視するかなど、必要な操作によって選びます。

2. 配列とリストは「位置」と「つながり」の違いで捉えるの比較表
データ構造基本的な見方得意な操作の例
配列添字で要素の位置を指定する位置が分かっている要素へのアクセス
リスト要素同士のリンクで順序を表すリンクを変更する挿入・削除

3. スタックとキューは取り出す順序を覚える

スタックはLIFO、キューはFIFOです。

スタックは、最後に追加した要素を最初に取り出すLIFO(Last In First Out)のデータ構造です。要素を追加する操作をpush、取り出す操作をpopと呼びます。

キューは、最初に追加した要素を最初に取り出すFIFO(First In First Out)のデータ構造です。待ち行列のように、到着した順に処理したい場面で使われます。

試験では名称だけでなく、実際に値を追加・削除した後にどの値が残るか、どの値が次に取り出されるかを追えることが重要です。

3. スタックとキューは取り出す順序を覚えるの比較表
データ構造取り出し順イメージ
スタックLIFO:後入れ先出し積み重ねた皿
キューFIFO:先入れ先出し受付の待ち行列

4. 木構造は階層関係を表す

根から枝分かれする構造として、親・子・葉などの関係を理解します。

木構造は、要素を節(ノード)として階層的につなぐデータ構造です。最上位の節を根(ルート)、下位に節を持たない節を葉(リーフ)と呼びます。

二分木は、各節が持つ子の数が高々2個の木です。二分探索木では、節の値の大小関係に一定の規則を持たせることで探索を行いやすくします。

木はファイルの階層、組織構造、探索用の索引など、親子関係を表したい場面で利用されます。

5. 探索と整列は「前提条件」と「操作」を区別する

線形探索は順に調べ、二分探索は探索範囲を半分ずつ狭めます。

線形探索は、先頭などから要素を一つずつ調べ、目的の値と一致するか確認する方法です。データが整列されていなくても使えます。

二分探索は、整列済みのデータについて中央の値と比較し、探索対象が存在する可能性のある半分だけを残す操作を繰り返します。整列済みであることが重要な前提です。

整列はデータを決められた順序へ並べ替える処理です。バブルソート、選択ソート、クイックソートなど複数の方法があり、手順や効率が異なります。

このページでは各アルゴリズムの動きと利用条件を中心に扱います。入力サイズに対する処理量の増え方は、別記事「計算量とアルゴリズムの効率」で詳しく扱う想定です。

探索方法の違い
探索基本動作主な前提
線形探索要素を順番に比較する整列不要
二分探索中央と比較して探索範囲を半分に絞るキー順に整列済み
二分探索は、データが整列されているという前提を見落とさないことが重要です。

ITパスポートではここまでを押さえる

  • アルゴリズムとデータ構造の違いを説明できる
  • 配列・リスト・スタック・キュー・木構造の基本的な特徴を区別できる
  • スタックがLIFO、キューがFIFOであることを説明できる
  • 線形探索と二分探索の違いを説明できる
  • 二分探索には整列済みデータが必要であることを理解している
  • 探索・併合・整列が代表的なアルゴリズムであることを理解している

FE深掘り

6. FEではハッシュ表と木の操作まで理解する

探索用の構造では、キーから格納位置を決める方法や木の巡回を扱います。

ハッシュ表では、キーにハッシュ関数を適用して格納位置を求めます。異なるキーから同じ位置が求められる衝突が起こるため、衝突を処理する方法も必要です。

木の巡回では、節をどの順番で訪れるかを決めます。二分木では先行順・中間順・後行順などがあり、木の用途に応じて使い分けます。

ヒープは親子間に大小関係の規則を持つ完全二分木として扱われ、優先度付きの処理やヒープソートなどにつながります。

  • ハッシュ表 = キーから格納位置を求める
  • 衝突 = 異なるキーが同じ位置に対応する
  • 木の巡回 = 節を訪れる順序を定める

FE深掘り

7. FEでは再帰とグラフ探索までつなげる

自分自身を呼び出す処理と、節・辺で表された関係の探索を理解します。

再帰は、手続や関数が自分自身を呼び出して問題をより小さな同種の問題へ分解する考え方です。再帰処理では、呼出しを終了できる基底条件が必要です。

グラフは節(頂点)と辺で関係を表すデータ構造です。道路網、通信経路、人間関係など、単純な親子関係だけでは表しにくいネットワークを扱えます。

深さ優先探索は一つの経路をできるだけ深く進んでから戻り、幅優先探索は開始点に近い節から層ごとに調べます。問題では訪問順序や探索状態を追う力が重要です。

7. FEでは再帰とグラフ探索までつなげるの比較表
探索進み方実装でよく対応する構造
深さ優先探索一方向へ深く進み、行き止まりで戻るスタック・再帰
幅優先探索開始点から近い順に広げるキュー

基本情報ではここまでつなげる

  • 配列・連結リスト・スタック・キューの操作結果を追える
  • 二分探索の前提と探索範囲の変化を説明できる
  • ハッシュ表で衝突が起こり得ることを理解している
  • 木構造の基本用語と代表的な巡回を説明できる
  • 再帰処理では基底条件が必要であることを説明できる
  • 深さ優先探索と幅優先探索の違いを説明できる

最後に一本の流れへ戻す

  • データの形と必要な操作を確認する
  • 操作に合うデータ構造を選ぶ
  • アルゴリズムの前提条件を確認する
  • 探索・整列などの処理手順を追う
  • FEでは木・ハッシュ・再帰・グラフ探索まで広げる
  • 効率の詳細は計算量の学習へつなげる

データ構造を単語として暗記するのではなく、『どんな順番で追加・取り出すか』『どの関係を表したいか』『どの探索が使える状態か』を処理の流れと結び付けると、科目Aの知識問題と科目Bのトレース問題を同じ理解から解けるようになります。

重要用語

理解度チェック

スタックから要素を取り出す順序を表すものはどれか。
キューの特徴として最も適切なものはどれか。
二分探索をそのまま適用するための重要な前提はどれか。
線形探索の説明として最も適切なものはどれか。
各要素が次の要素などとのつながりを持ち、その関係で順序を表すデータ構造はどれか。
木構造で、下位に節を持たない節を何というか。
ハッシュ表で、異なるキーから同じ格納位置が求められる現象はどれか。
幅優先探索の実装で、探索候補を到着順に処理するためによく用いられるデータ構造はどれか。
再帰的な処理について最も重要な説明はどれか。
深さ優先探索の進み方として最も適切なものはどれか。