SIGMA-SE Tech Blog

SIGMA-SE Tech Blog

応用情報技術 - 基礎覚書き:データ構造に関する理論

目的

この記事では、応用情報技術者試験の出題分野であるデータ構造に関する覚書きを列挙する。

配列

  • 配列
    複数の類似データを連続的に集約したデータ型の総称。

  • 静的配列
    指定した配列数と一つのデータ型のみ格納できる配列。

  • 動的配列
    任意の配列数で異なるデータ型を格納できる配列。

スタック/キュー

  • スタック
    後入れ先出し(LIFO:Last In First Out)のデータ構造のこと。
    スタックにデータを入れることをpush、データを出すことをpopという。

  • キュー
    先入れ先出し(FIFO:First In First Out)のデータ構造のこと。
    キューにデータを入れることをenqueue、データを出すことをdequeueという。

線形リスト

※ 線形リストは、単にリストとも呼ばれる。

  • 線形リスト
    順序付けされた関連データを集約したデータ構造のこと。

    データ値を保持するデータ部と、データ順を保持するポインタ部で構成されている。
    ポインタ部は、次データ前データ以外にも先頭ポインタ末尾ポインタも含む。

  • 単方向リスト
    ポインタ部次データへのポインタのみ保持するリスト。

  • 双方向リスト
    ポインタ部次データ前データへのポインタを保持するリスト。

  • 環状リスト
    単方向リストのポインタに加え、末尾のポインタ部先頭ポインタを持つリスト。

ハッシュ

  • ハッシュ関数
    データをあるルールに従って別の値に変換する一方向性の関数のこと。

    変換後の値変換前の値に戻すことができない。
    例えば、\(x\) の剰余 \(n\) を求める関数 \(y = x \bmod n\) のように右辺から左辺の \(y\) は求められるが、その逆は求められない。

  • ハッシュテーブル(ハッシュ表)
    キー(key)と値(value)を一つの単位としたデータ構造。
    キー(key)値(value)一方向性が前提。

    • 例 : ハッシュ関数を \(h(x) = x \bmod n\) とし、ハッシュテーブルとして、キーを自然数 \(x\)、値を \(n\) で管理する。
      この時、任意のキー \(a\)、\(b\) の値が一致する条件を考える。

      → 「値が一致する」ことより、次のように置ける。
      \(a = a^{\prime} \times n + m\)
      \(b = b^{\prime} \times n + m\)
      (\(a^{\prime}, b^{\prime}\) は整数、\(m\) は値)

      よって
      \(a = a^{\prime} \times n + b\) \(-\ b^{\prime} \times n\)
      \(a - b = n (a^{\prime} - b^{\prime})\)

      また、\(a^{\prime}\ -\ b^{\prime}\) は、整数である。

      よって
      \(a - b\) が \(n\) の倍数であることが条件となる。

木構造の分類

  • 木構造
    木構造は、閉路(閉じたノード)を持たないグラフ構造でルート(根)ノード(枝)リーフ(葉)から構成される。

    ※ 上記は、応用数学の「5. グラフ理論」で触れた記載と同じ。
    応用情報技術 - 基礎覚書き:応用数学 > グラフ理論

  • \(2\) 分木
    子ノードの数が \(2\) つ以下である木構造。
    実用例として、データの大小関係を木構造でたどる \(2\) 分探索木や構文・文法を表現する構文木などがある。

  • 多分木
    子ノードの数が \(3\) つ以上である木構造。

  • 完全 \(2\) 分木
    子ノードの数がすべて \(2\) つである木構造。
    実用例として、 \(2\) 分探索木を完全 \(2\) 分木に変換したAVL木からに向けてデータを整列させたヒープなどがある。

  • 完全多分木
    子ノードの数が \(3\) つ以上ですべて同じである木構造。
    実用例として、\(2\) 分探索木の完全多分木バージョンであるB木などがある。

ヒープ

  • ヒープ
    が最大 or 最小となるように構成した木構造で完全 \(2\) 分木の一種(前項の実用例)。

    全要素から最大値 or 最小値を求める場合に適したデータ構造。

    最小値を求める場合、子要素は親要素より常に大きいように構成する。
    最大値を求める場合、子要素は親要素より常に小さいように構成する。

参考文献

  • 瀬戸 美月(2020)『徹底攻略 応用情報技術者教科書』株式会社インプレス


Copyright SIGMA-SE All Rights Reserved.
s-hama@sigma-se.jp