※小説ではない※専門書 要約資料集 為替(換算)3.9万円でもらう 紐解集生成 専門 初入門 資料   作:{作者名}

164 / 382
# BOOK-0207 情報史料 — アルゴリズムとデータ構造の早見

> 学問の宇宙・史料図書(§16.17)第207号。図解・一覧が主役の簡易専門書。ガイド役: Fable 5 監修 / Sonnet 5 執筆(史料図書隊・情報担当)。
> 位置づけ: BOOK-0066『アルゴリズムとデータ構造 — 「手順」という発明の階段(第1巻)』は歴史の物語(散文)を担当する。本冊はそれと**重複せず**、計算量・ソート・探索・データ構造そのものを**一望できる早見表・計算量とデータ構造の一覧**として機能する。
> 文章規約: 見出し+一行解説主体。専門語は初出に水準(§14.2)を付す。外部本文の転載はしない(§16.5)。数値は確実なものだけを断言し、それ以外は「約」「概数」と明記する。



# BOOK-0207 情報史料 — アルゴリズムとデータ構造の早見

# BOOK-0207 情報史料 — アルゴリズムとデータ構造の早見

 

> 学問の宇宙・史料図書(§16.17)第207号。図解・一覧が主役の簡易専門書。ガイド役: Fable 5 監修 / Sonnet 5 執筆(史料図書隊・情報担当)。

> 位置づけ: BOOK-0066『アルゴリズムとデータ構造 — 「手順」という発明の階段(第1巻)』は歴史の物語(散文)を担当する。本冊はそれと**重複せず**、計算量・ソート・探索・データ構造そのものを**一望できる早見表・計算量とデータ構造の一覧**として機能する。

> 文章規約: 見出し+一行解説主体。専門語は初出に水準(§14.2)を付す。外部本文の転載はしない(§16.5)。数値は確実なものだけを断言し、それ以外は「約」「概数」と明記する。

 

---

 

## 目次

 

1. 計算量O記法の早見(速さ順)

2. 主要ソートの比較表

3. 探索の早見(線形探索・二分探索)

4. データ構造の早見(得意操作と計算量)

5. 再帰と反復の一行まとめ

6. ASCII図解(木・連結リスト・スタック)

7. 擬似コード集

8. 数値検算ログ(実測・自己検算)

9. 検定問題(public/answers)

 

---

 

## 1. 計算量O記法の早見(速さ順)

 

**計算量(けいさんりょう、水準一: アルゴリズムが問題を解くのに必要な手順の回数が、データ件数Nの増加に対してどう増えていくかを表す指標)**を、**O記法(オーきほう、ビッグオー記法、水準一: 手順の回数がデータ件数Nに対しどんな勢いで増えるかを O(...) の形で表す記法)**で、速い順に並べる。

 

| O記法 | 読み方 | 増え方の一行解説 | 水準 |

|---|---|---|---|

| `O(1)` | オーいち(定数時間) | 件数Nに関係なく、常に一定の手順回数で終わる。 | 一 |

| `O(log n)` | オーログエヌ(対数時間) | 件数が2倍になっても、手順回数はたった1回しか増えない。 | 二 |

| `O(n)` | オーエヌ(線形時間) | 件数に比例して、手順回数もそのまま増える。 | 一 |

| `O(n log n)` | オーエヌログエヌ(線形対数時間) | 件数×「緩やかにしか増えない量」。優秀な整列法の代表的な勢い。 | 三 |

| `O(n²)` | オーエヌにじょう(二乗時間) | 件数の2乗の勢いで手順回数が膨らむ。 | 二 |

| `O(2^n)` | オーにのえぬじょう(指数時間) | 件数が1増えるごとに手順回数が2倍になる、極めて重い増え方。 | 四 |

 

```

速さの順序(左ほど速い・水準一〜四のまとめ)

O(1) < O(log n) < O(n) < O(n log n) < O(n²) < O(2^n)

```

 

- `O(1)`の例: 配列の「何番目か」を指定してのアクセス(番地が分かれば一瞬)。

- `O(log n)`の例: 整列済みデータへの二分探索。

- `O(n)`の例: 先頭から順に確認する線形探索。

- `O(n log n)`の例: マージソート・ヒープソート・クイックソート(平均)。

- `O(n²)`の例: バブルソート・選択ソート・挿入ソート(いずれも最悪計算量)。

- `O(2^n)`の例: すべての組み合わせを網羅的に試す一部の探索(件数が増えると現実的な時間で終わらなくなる代表格)。

 

---

 

## 2. 主要ソートの比較表

 

**整列アルゴリズム(せいれつアルゴリズム、水準一: バラバラな順序のデータを決まった順序に並べ替える手順)**、いわゆる「ソート」を計算量で比較する。

 

| ソート名 | 平均計算量 | 最悪計算量 | 水準 | 一行解説 |

|---|---|---|---|---|

| バブルソート | O(n²) | O(n²) | 一 | 隣り合う2つを比較し、順序が逆なら入れ替える動作を端から端まで繰り返す。 |

| 選択ソート | O(n²) | O(n²) | 一 | 未整列部分から最小値を探し、未整列部分の先頭と入れ替える動作を繰り返す。 |

| 挿入ソート | O(n²) | O(n²) | 一 | 整列済み部分に、未整列の要素を一つずつ正しい位置へ挿入していく。 |

| マージソート | O(n log n) | O(n log n) | 三 | データを半分ずつに分割し、それぞれ整列してから統合(マージ)する分割統治法。 |

| ヒープソート | O(n log n) | O(n log n) | 三 | ヒープ(木構造の一種)を作り、最大〈最小〉値を1つずつ取り出して並べる。 |

| クイックソート | O(n log n) | O(n²) | 三 | 基準値(ピボット)より小さい/大きいで振り分けてから、それぞれを再帰的に整列する。 |

 

```

比較表の一行早見(速さの傾向)

バブル・選択・挿入 → O(n²) … 件数が増えるほど急激に重くなる

マージ・ヒープ → O(n log n) … 最悪の場合でも安定して速い

クイック → O(n log n)(平均)だが最悪 O(n²) … 基準値の選び方次第で最悪ケースあり

```

 

- バブル・選択・挿入の3つは実装が単純で理解しやすい反面、件数が数千〜数万に増えると`O(n²)`の重さが顕著になる。

- マージソート・ヒープソートは最悪の場合でも`O(n log n)`を保証する安定した速さを持つ。

- クイックソートは平均では最も高速な部類だが、基準値の選び方が悪いと最悪`O(n²)`まで落ち込む場合がある、という点が実務上の注意点である。

 

---

 

## 3. 探索の早見(線形探索・二分探索)

 

| 探索法 | 計算量 | 前提条件 | 水準 | 一行解説 |

|---|---|---|---|---|

| 線形探索 | O(n) | なし(整列不要) | 一 | 先頭から順に一つずつ確認していく、最も素直な探索方法。 |

| 二分探索 | O(log n) | データが整列済みであること | 二 | 真ん中の要素と比較し、探索範囲を半分ずつに絞り込んでいく。 |

 

```

探索法の使い分け(一行早見)

整列されていないデータ・一度きりの探索 → 線形探索 O(n)

整列済みデータ・繰り返し何度も探す → 二分探索 O(log n)

```

 

- 二分探索は「データが整列済み」という前提が崩れると使えない。整列そのものにもコスト(§2参照)がかかるため、「何度も探すなら先に整列して二分探索、一度きりなら線形探索」という判断が実務上の目安になる。

 

---

 

## 4. データ構造の早見(得意操作と計算量)

 

**データ構造(データこうぞう、水準一: データを効率よく扱えるように整理して収める、記憶上の入れ物の設計)**ごとに、得意な操作と代表的な計算量を一覧化する。

 

| データ構造 | 得意な操作 | 代表的な計算量 | 水準 | 一行解説 |

|---|---|---|---|---|

| 配列 | 番地(インデックス)指定でのアクセス | アクセス O(1) / 途中への挿入・削除 O(n) | 一 | 番号のついたロッカーが横一列に並ぶイメージ。番地さえ分かれば一瞬でアクセスできる。 |

| 連結リスト | 途中への挿入・削除 | 挿入・削除 O(1)(位置が分かっている場合) / 先頭からの探索 O(n) | 二 | 各データが「次の場所」を示す情報を持ち、鎖のようにつながる。 |

| スタック | 末尾への追加・末尾からの取り出し(LIFO・後入れ先出し) | 追加・取り出し O(1) | 一 | 重箱にお皿を積むように、最後に入れたものを最初に取り出す。 |

| キュー | 末尾への追加・先頭からの取り出し(FIFO・先入れ先出し) | 追加・取り出し O(1) | 一 | スーパーのレジ待ちの行列のように、先に入れたものを先に取り出す。 |

| 木(二分探索木) | 整列された状態での探索・挿入・削除 | 平均 O(log n) / 最悪 O(n)(偏った木の場合) | 三 | 根から枝分かれし、親子関係でつながる。左の子は小さい値、右の子は大きい値というルールを持つものが二分探索木。 |

| ハッシュ表 | キーを指定してのデータの検索・追加・削除 | 平均 O(1) / 最悪 O(n)(衝突が多い場合) | 三 | キーをハッシュ関数で変換し、対応する場所に直接データを格納・参照する。 |

| グラフ | 要素間の関係(つながり)の表現・探索 | 探索の計算量は表現方法・アルゴリズムに依存(例: 幅優先探索は O(頂点数+辺数)) | 四 | 点(頂点)と点同士をつなぐ線(辺)で、ネットワークのような関係性を表す。 |

 

```

得意操作の一行早見(まとめ)

配列 → 番地アクセスが得意(O(1))・途中挿入は苦手(O(n))

連結リスト → 途中挿入・削除が得意・順番のたどりは苦手(O(n))

スタック → 後入れ先出し(LIFO)専用の出し入れがO(1)

キュー → 先入れ先出し(FIFO)専用の出し入れがO(1)

木 → 親子関係の表現・整列された探索が得意(平均O(log n))

ハッシュ表 → キー指定での検索が得意(平均O(1))

グラフ → 「つながり」そのものの表現に特化

```

 

- 配列と連結リスト、スタックとキューは、それぞれ「得意・不得意が裏返しの関係」になっている代表的な対比である。

- 木構造は「偏りなく枝分かれしている」場合に`O(log n)`が成立する。片方にだけ伸び続けた偏った木は、最悪`O(n)`まで悪化する(実質的に連結リストと同じ形になるため)。

- ハッシュ表の`O(1)`も「衝突(異なるキーが同じ場所に割り当てられること)が少ない」という前提つきの平均計算量である。

 

---

 

## 5. 再帰と反復の一行まとめ

 

| 考え方 | 一行解説 | 水準 |

|---|---|---|

| 反復(はんぷく、iteration) | 同じ処理を、ループ(繰り返し構文)を使って何度も実行する考え方。 | 一 |

| 再帰(さいき、recursion) | ある手順の中で、その手順自身をより小さな問題に対して呼び出す考え方。 | 二 |

 

- 反復はループ(for・whileなど)で「同じことを繰り返す」動きを直接書く。

- 再帰は「大きな問題を、同じ形をした小さな問題に分割し、小さな問題を解いてから組み合わせる」という戦略で、マージソート・クイックソート・木構造の探索などで頻繁に使われる(BOOK-0066第三章参照)。

- 同じ処理を再帰でも反復でも書ける場合が多いが、再帰は「分割統治」のような自己相似な問題との相性が良く、反復は単純な繰り返し処理との相性が良い、という使い分けの目安がある。

 

---

 

## 6. ASCII図解(木・連結リスト・スタック)

 

### 6.1 木構造(二分探索木の例)

 

```

[8]

/ \

[3] [10]

/ \ \

[1] [6] [14]

 

読み方: 8が根(ルート)。左の枝(3,1,6)は8より小さい値、

右の枝(10,14)は8より大きい値というルールで並ぶ。

6を探す場合: 8と比較→6は小さいので左へ→3と比較→6は大きいので右へ→発見(2回の比較)。

```

 

### 6.2 連結リスト

 

```

[先頭] → [データA|次へ] → [データB|次へ] → [データC|次へ] → NULL(終端)

 

読み方: 各要素が「次の要素の場所」だけを持ち、鎖のようにつながる。

途中(例: AとBの間)に新しい要素を挿入するときは、

「次へ」の矢印を1本つなぎ替えるだけで済み、他の要素はずらさなくてよい。

```

 

### 6.3 スタック(LIFO・後入れ先出し)

 

```

push(積む)方向

↓

┌────┐

│ C │ ← 最後に積んだものが一番上(=最初に取り出される)

├────┤

│ B │

├────┤

│ A │ ← 最初に積んだものが一番下

└────┘

↑

pop(取り出す)は必ず一番上(C)から

```

 

---

 

## 7. 擬似コード集

 

### 7.1 二分探索

 

```

手順(二分探索):

1. 探索範囲全体の「真ん中」の要素を見る

2. 探している値と一致すれば、見つかったので終了

3. 探している値が真ん中より小さいなら、範囲を前半だけに絞る

4. 探している値が真ん中より大きいなら、範囲を後半だけに絞る

5. 絞り込んだ範囲に対して手順1へ戻る(範囲が空なら「存在しない」と判定)

```

 

### 7.2 マージソート(分割統治・再帰の例)

 

```

手順(マージソート):

1. データが1個以下なら、すでに整列済みとみなして終了

2. データを前半と後半、ほぼ半分ずつに分割する

3. 前半に対して、この手順(1〜4)を再び適用する(再帰)

4. 後半に対しても同様にこの手順を再び適用する(再帰)

5. 整列された前半と後半を、先頭同士を比べながら1つの列に統合(マージ)する

```

 

### 7.3 スタックを使った操作の基本形

 

```

手順(スタックの基本操作):

push(値): スタックの一番上に値を積む

pop(): スタックの一番上から値を取り出して取り除く

peek(): スタックの一番上の値を、取り除かずに確認する

```

 

---

 

## 8. 数値検算ログ(実測・自己検算)

 

自己検算を実施し、結果のみ断言する。

 

1. **log2(1024)=10 の検算**: 2を10回掛け合わせると `2^10 = 1024`。よって`log2(1024)=10`(検算一致)。二分探索なら1024件のデータを最大10回の比較で絞り込める。

2. **選択ソート(O(n²))の概算比較回数**: N=1024のとき、未整列部分から最小値を探す比較の合計はおよそ`N×(N-1)÷2`回。計算すると`1024×1023÷2=523776`回(概数「約52万回」)。

3. **マージソート(O(n log n))の概算比較回数**: N=1024のとき、`N×log2(N)=1024×10=10240`回(概数「約1万回」)。

4. **選択ソートとマージソートの比較回数の比**: `523776÷10240 ≈ 51.15`。よって約51倍、選択ソートの方が比較回数が多い(概数「約50倍」)。

5. **O(2^n)の急増の検算**: nが10のとき`2^10=1024`、nが20のとき`2^20=1048576`。nがわずか10増えただけで、回数はおよそ1024倍に増える(`1048576÷1024=1024`、検算一致)。

 

---

 

## 9. 検定問題

 

### quiz_public(鍵なし・配布用)

 

以下12問。各問四択。答えの記載はなし(読者検定用)。

 

1. (易) `O(1)`の一行解説として正しいものはどれか。 A.件数に比例して回数が増える B.件数に関係なく一定の回数で終わる C.件数の2乗の勢いで回数が増える D.件数が2倍になると回数も2倍になる

2. (易) 二分探索の計算量として正しいものはどれか。 A.O(1) B.O(n) C.O(log n) D.O(n²)

3. (易) バブルソート・選択ソート・挿入ソートに共通する計算量はどれか。 A.O(log n) B.O(n) C.O(n log n) D.O(n²)

4. (易) スタックのルール(LIFO)の一行解説として正しいものはどれか。 A.先に入れたものを先に取り出す B.最後に入れたものを最初に取り出す C.真ん中の要素から取り出す D.ランダムな順に取り出す

5. (中) マージソート・ヒープソート・クイックソートに共通する平均計算量はどれか。 A.O(n) B.O(n²) C.O(n log n) D.O(2^n)

6. (中) 二分探索を使うための前提条件として正しいものはどれか。 A.データが整列済みであること B.データが未整列であること C.データが木構造であること D.データがハッシュ表であること

7. (中) 配列の弱点として本文が挙げているものはどれか。 A.番地アクセスが遅い B.途中への挿入・削除に手間がかかる C.順番にしかアクセスできない D.整列ができない

8. (中) キュー(FIFO)の身近な例として本文が挙げているものはどれか。 A.重箱にお皿を積む動作 B.スーパーのレジ待ちの行列 C.本棚から本を探す動作 D.木の枝分かれ

9. (難) log2(1024)の検算結果として正しいものはどれか。 A.8 B.9 C.10 D.11

10. (難) N=1024のとき、選択ソートの概算比較回数として本文が示す値はどれか。 A.約1万回 B.約5万回 C.約52万回 D.約100万回

11. (難) 二分探索木が最悪O(n)まで悪化する条件として本文が説明するものはどれか。 A.枝分かれが均等な場合 B.片方にだけ偏って伸び続けた場合 C.データが整列されている場合 D.ハッシュ関数を使った場合

12. (難) ハッシュ表の平均計算量O(1)が成立する前提として本文が説明するものはどれか。 A.衝突が少ないこと B.データが整列済みであること C.木構造であること D.再帰を使っていること

 

### answers(鍵・根拠つき・非公開)

 

| 問 | 正解 | 根拠(本文箇所) |

|---|---|---|

| 1 | B | §1計算量O記法の早見の表: 「件数Nに関係なく、常に一定の手順回数で終わる」(O(1)の行) |

| 2 | C | §3探索の早見の表: 「二分探索 O(log n)」 |

| 3 | D | §2主要ソートの比較表: 「バブル・選択・挿入の3つは実装が単純で理解しやすい反面」の段落、および表の該当3行がいずれもO(n²) |

| 4 | B | §6.3スタック図解: 「最後に積んだものが一番上(=最初に取り出される)」 |

| 5 | C | §2主要ソートの比較表: マージソート・ヒープソート・クイックソートの表内、平均計算量の列がいずれもO(n log n) |

| 6 | A | §3探索の早見の表: 二分探索の行、前提条件の列に「データが整列済みであること」 |

| 7 | B | §4データ構造の早見の表: 「配列 … 途中への挿入・削除 O(n)」、一行解説「番地さえ分かれば一瞬でアクセスできる」の対比記述 |

| 8 | B | §4データ構造の早見の表: 「スーパーのレジ待ちの行列のように、先に入れたものを先に取り出す」(キューの行) |

| 9 | C | §8数値検算ログ1: 「2を10回掛け合わせると `2^10 = 1024`。よって`log2(1024)=10`」 |

| 10 | C | §8数値検算ログ2: 「`1024×1023÷2=523776`回(概数「約52万回」)」 |

| 11 | B | §4データ構造の早見の補足: 「片方にだけ伸び続けた偏った木は、最悪`O(n)`まで悪化する」 |

| 12 | A | §4データ構造の早見の補足: 「ハッシュ表の`O(1)`も「衝突(異なるキーが同じ場所に割り当てられること)が少ない」という前提つきの平均計算量である」 |

 

**分散チェック(outputs/node_test_book0207.jsで実測)**: 正解インデックス内訳 = A:2問(#6,#12)、B:5問(#1,#4,#7,#8,#11)、C:4問(#2,#5,#9,#10)、D:1問(#3)。4種のインデックスを全て使用し、最大出現数は5問(B)で上限6問以内、最低3種以上の規定(§16.4)を満たす(2026-07-04実測・機械検査PASS)。

 

---

 

## 図解総まとめ

 

```

史料図書BOOK-0207の九枚看板

① 計算量O記法の早見(O(1)〜O(2^n)を速さ順に)

② 主要ソートの比較表(バブル/選択/挿入=O(n²)、マージ/ヒープ/クイック=O(n log n)平均)

③ 探索の早見(線形O(n)・二分探索O(log n))

④ データ構造の早見(配列・連結リスト・スタック・キュー・木・ハッシュ表・グラフ)

⑤ 再帰と反復の一行まとめ

⑥ ASCII図解(木・連結リスト・スタック)

⑦ 擬似コード集(二分探索・マージソート・スタック操作)

⑧ 数値検算ログ(log2(1024)=10等の自己検算)

⑨ 検定問題(quiz_public+answers 12問・易4中4難4)

```

 

## 参照文献

 

1. BOOK-0066『アルゴリズムとデータ構造 — 「手順」という発明の階段(第1巻)』(本図書館・散文版・アルゴリズムの歴史とデータ構造の物語を扱う)。

2. 標準的な計算機科学の教科書水準で広く共有されている、ソート・探索アルゴリズムの計算量分類(バブル/選択/挿入=O(n²)、マージ/ヒープ=O(n log n)、クイック=平均O(n log n)・最悪O(n²))。

3. 標準的なデータ構造(配列・連結リスト・スタック・キュー・木・ハッシュ表・グラフ)の定義と代表的な計算量。

 




# BOOK-0207 情報史料 — アルゴリズムとデータ構造の早見
  1. 目次
  2. 小説情報
  3. 縦書き
  4. しおりを挟む
  5. お気に入り登録
  6. 評価
  7. 感想
  8. ここすき
  9. 誤字
  10. 閲覧設定