コンテンツにスキップ

アルゴリズム・データ構造の無料テキスト:Jeff Erickson のオープンテキスト

概要

Illinois 大学 Jeff Erickson 教授による無料アルゴリズム教科書(jeffe.cs.illinois.edu)の紹介。FAANG・テック企業の面接でよく出るアルゴリズムが網羅されており、無料で PDF ダウンロードが可能。

詳細

Jeff Erickson の Algorithms テキストとは

  • URL: http://jeffe.cs.illinois.edu/teaching/algorithms/
  • Illinois 大学 CS の学部・大学院向け教科書
  • 完全無料・CC ライセンス(PDF ダウンロード可)
  • 800ページ以上で証明・擬似コード付き

カバーされている主なトピック

再帰とバックトラッキング

# N クイーン問題(バックトラッキング)
def solve_nqueens(n):
    def is_valid(board, row, col):
        for i in range(row):
            if board[i] == col: return False
            if abs(board[i] - col) == abs(i - row): return False
        return True

    def backtrack(board, row):
        if row == n:
            result.append(board[:])
            return
        for col in range(n):
            if is_valid(board, row, col):
                board[row] = col
                backtrack(board, row + 1)

    result = []
    backtrack([-1] * n, 0)
    return result

動的計画法(DP)

よく出る DP パターン:

1. 1次元DP: フィボナッチ、コイン問題
2. 2次元DP: 最長共通部分列(LCS)、編集距離
3. 区間DP: 行列チェーン積、バルーンバースト
4. メモ化再帰: 上記の top-down 版

メモ化再帰の例(コイン問題):
  dp[i] = amount i を作るのに必要な最小枚数
  dp[0] = 0
  dp[i] = min(dp[i - coin] + 1) for coin in coins if i >= coin

グラフアルゴリズム

BFS: 最短経路(重みなし)、幅優先探索
DFS: 連結成分、トポロジカルソート、サイクル検出
Dijkstra: 最短経路(重みあり・非負)O(E log V)
Bellman-Ford: 最短経路(負の重みあり)O(VE)
Floyd-Warshall: 全点対最短経路 O(V³)
Union-Find: 連結成分の高速判定
MST(Prim/Kruskal): 最小全域木

ソート・探索

計算量の比較:
  O(n²): バブルソート、挿入ソート(小データには有効)
  O(n log n): マージソート(安定)、クイックソート(平均)、ヒープソート
  O(n): カウンティングソート、基数ソート(整数限定)

二分探索の変種:
  - 左端・右端の検索(lower_bound, upper_bound)
  - 回転配列での二分探索
  - 答えで二分探索(最小値の最大化など)

面接対策としての使い方

優先度の高いチャプター:

1. Recursion(再帰)
   → バックトラッキングの土台
2. Dynamic Programming
   → 面接最頻出カテゴリ
3. Graphs(グラフ)
   → BFS/DFS/Dijkstra は必須
4. Divide and Conquer
   → マージソート、クイックソートの理解

学習順序:
  配列/文字列 → 再帰 → DP → グラフ → 木 → 高度なデータ構造

なぜ重要か / いつ使うか

  • FAANG面接前の網羅的な学習: LeetCode と組み合わせて理論背景を補強
  • 無料で高品質: CS専門書として有料書籍に匹敵する内容が無料
  • 証明付き: なぜそのアルゴリズムが正しいのかを理解するため(面接でも「なぜ?」を聞かれる)
  • 競技プログラミング: アルゴリズムの標準的な実装・計算量理解に必須