データ構造とは — なぜ重要なのか
このトピックを修了すると
データ構造が何であるかを説明でき、なぜ「データをどのように保存するか」がプログラムのパフォーマンスを決定するのかを理解できるようになります。
同じデータ、異なるパフォーマンス
電話帳を考えてみましょう。1000人の名前と電話番号があります。
方法A: 紙に順番によらず書き出す
- 「キム・フン」を探すには? → 最初から一つずつ確認。最悪の場合、1000回
方法B: 辞書順に並べ替える
- 「キム・フン」を探すには? → 中央を開いて比較し、半分ずつ絞り込む。最大10回で探せる
データは同じです。保存および整理する方法が異なるだけで、検索速度は100倍の差があります。
これが**データ構造(Data Structure)**の核心です — データをどのような形で組織するかによって、演算の効率が異なります。
データ構造の基本的な種類
text
線形データ構造(一列に並んだもの)
├── 配列(Array) — 連続したセルに順番に
├── 連結リスト — 各セルが次のセルを指す
├── スタック(Stack) — 上からのみ入れ、取り出す
└── キュー(Queue) — 後ろから入れ、前から取り出す
非線形データ構造(枝分かれするもの)
├── ツリー(Tree) — 階層構造
├── グラフ(Graph) — 自由な接続
└── ハッシュテーブル — キーで直接アクセスなぜ一つのデータ構造だけではいけないのか
配列が万能であれば、他のデータ構造は必要ないでしょう。しかし、各構造には得意なことと不得意なことがあります。
| 演算 | 配列 | 連結リスト | ハッシュテーブル |
|---|---|---|---|
| インデックスによるアクセス | 速い | 遅い | — |
| 検索 | 遅い | 遅い | 速い |
| 挿入/削除 | 遅い | 速い | 速い |
「このプログラムは検索をたくさん行うのでハッシュテーブル」、「順番が重要なので配列」 — 状況に合ったデータ構造を選択することがプログラマーの判断です。
データ構造 + アルゴリズム = プログラム
有名な公式があります。
プログラム = データ構造 + アルゴリズム — ニクラス・ヴィルト(Pascal言語の創始者)
データ構造はデータを格納する入れ物であり、アルゴリズムはその入れ物からデータを処理する方法です。良い入れ物に良いレシピを使うと、効率的なプログラムになります。
実務においてなぜ重要なのか
python
# リストからの検索 — O(n)、データが多いと遅いusers = ["キム・フン", "イ・ス", "パク・ジン", ...] # 100万人"キム・フン" in users # 最悪100万回比較
# 辞書(ハッシュテーブル)からの検索 — O(1)、ほぼ即時users = {"キム・フン": "010-1234", "イ・ス": "010-5678", ...}users["キム・フン"] # 一瞬で検索100万人のユーザーがいる場合、データ構造の選択によって100万回 vs 1回の差が生じます。これがデータ構造を学ぶ理由です。