Keito

© 2024 Keito

技術ブログとポートフォリオ

アルゴリズム学習

視覚化とインタラクティブな実行で、アルゴリズムの動作原理を直感的に理解しよう

👁️

視覚化学習

アルゴリズムの各ステップを目で見て理解

🎮

インタラクティブ

自分のペースでステップ実行できる

📚

詳細解説

理論から実装まで包括的に学習

📖 学習可能なアルゴリズム

二分探索

探索

ソート済み配列から効率的に要素を検索する基本アルゴリズム

時間計算量:O(log n)
空間計算量:O(1)
難易度:★★☆☆☆

バブルソート

ソート

隣接する要素を比較して交換を繰り返すシンプルなソートアルゴリズム

時間計算量:O(n²)
空間計算量:O(1)
難易度:★★☆☆☆

線形探索

探索

配列の先頭から順次要素を確認して目標値を探すシンプルな探索アルゴリズム

時間計算量:O(n/2)
空間計算量:O(1)
難易度:★☆☆☆☆

選択ソート

ソート

未ソート部分から最小値を見つけて先頭に移動する操作を繰り返すソートアルゴリズム

時間計算量:O(n²)
空間計算量:O(1)
難易度:★★☆☆☆

挿入ソート

ソート

配列の各要素を既にソートされた部分の適切な位置に挿入するソートアルゴリズム

時間計算量:O(n²)
空間計算量:O(1)
難易度:★★☆☆☆

クイックソート

ソート

分割統治法による効率的なソートアルゴリズム

時間計算量:O(n log n)
空間計算量:O(log n)
難易度:★★★☆☆

マージソート

ソート

分割統治法による安定なソートアルゴリズム。常にO(n log n)の性能を保証

時間計算量:O(n log n)
空間計算量:O(n)
難易度:★★★☆☆

ヒープソート

ソート

ヒープデータ構造を利用したインプレースソートアルゴリズム。常にO(n log n)の性能を保証

時間計算量:O(n log n)
空間計算量:O(1)
難易度:★★★☆☆

フィボナッチ数列(再帰)

その他

再帰アルゴリズムの代表例。関数が自分自身を呼び出して数列を計算し、指数的計算量の問題を学習

時間計算量:O(2^n)
空間計算量:O(n)
難易度:★★★☆☆

フィボナッチ数列(動的計画法)

動的計画法

動的計画法を使用した効率的なフィボナッチ数列の計算。メモ化により再帰版の問題を解決

時間計算量:O(n)
空間計算量:O(n)
難易度:★★☆☆☆

部分和問題(動的計画法)

動的計画法

二次元DPテーブルを使った部分和問題の効率的な解法。配列の部分集合でターゲットの和を作れるかを判定

時間計算量:O(n×S)
空間計算量:O(n×S)
難易度:★★★☆☆

階乗の計算(再帰)

その他

線形再帰アルゴリズムの基本例。数学的定義をそのまま実装し、効率的なO(n)の再帰構造を学習

時間計算量:O(n)
空間計算量:O(n)
難易度:★★☆☆☆

ハノイの塔(再帰)

分割統治

分割統治法による再帰的解法。3つの杭を使って全ての円盤を移動する古典的パズルで、再帰アルゴリズムの美しい応用例

時間計算量:O(2^n)
空間計算量:O(n)
難易度:★★★★☆

配列の逆順(再帰)

その他

再帰による配列の逆順操作。線形再帰パターンで分割統治の考え方を学習し、両端から中央に向かって要素を交換

時間計算量:O(n)
空間計算量:O(n)
難易度:★★☆☆☆

深さ優先探索(DFS)

グラフ

グラフや木構造を深く探索するアルゴリズム。可能な限り深く進んでからバックトラックして他の経路を探索

時間計算量:O(V + E)
空間計算量:O(V)
難易度:★★★☆☆

幅優先探索(BFS)

グラフ

グラフや木構造を幅優先で探索する基本的なアルゴリズム。レベルごとに探索し、最短経路を保証

時間計算量:O(V + E)
空間計算量:O(V)
難易度:★★☆☆☆

スタック(基本操作)

データ構造

LIFO(Last In, First Out)原理に基づくスタックデータ構造の基本操作。push、pop、peek等の動作を可視化

時間計算量:O(1)
空間計算量:O(n)
難易度:★☆☆☆☆

配列(基本操作)

データ構造

インデックスベースのランダムアクセスが可能な配列データ構造の基本操作。CRUD操作と線形検索を可視化

時間計算量:O(n)
空間計算量:O(n)
難易度:★☆☆☆☆

キュー(基本操作)

データ構造

FIFO(First In, First Out)原理に基づくキューデータ構造の基本操作。enqueue、dequeue等の動作を可視化

時間計算量:O(1)
空間計算量:O(n)
難易度:★☆☆☆☆

両端キュー(基本操作)

データ構造

両端からの追加・削除が可能な双方向キューデータ構造の基本操作。push/pop操作を前後両方向で実行可能

時間計算量:O(1)
空間計算量:O(n)
難易度:★★☆☆☆

連結リスト(基本操作)

データ構造

ノードとポインタで構成される動的データ構造の基本操作。挿入・削除・検索の動作を詳細に可視化

時間計算量:O(n)
空間計算量:O(n)
難易度:★★★☆☆

最大公約数(ユークリッドの互除法)

その他

紀元前300年から続く古典的なアルゴリズムで二つの整数の最大公約数を効率的に求める手法

時間計算量:O(log(min(a, b)))
空間計算量:O(1)
難易度:★★☆☆☆

最小公倍数(LCM)

その他

GCDを利用して二つの整数の最小公倍数を効率的に求める数学的アルゴリズム。分数計算や周期計算に応用

時間計算量:O(log(min(a, b)))
空間計算量:O(1)
難易度:★★☆☆☆

最長共通部分列(LCS)

動的計画法

動的計画法を使用して二つの文字列の最長共通部分列を効率的に求める文字列アルゴリズム。DNA解析やテキスト比較に応用

時間計算量:O(m×n)
空間計算量:O(m×n)
難易度:★★★☆☆

最長増加部分列(LIS)

動的計画法

動的計画法を使用して配列から最長の増加部分列を効率的に求める最適化アルゴリズム。株価分析や時系列解析に応用

時間計算量:O(n²)
空間計算量:O(n)
難易度:★★★☆☆

エラトステネスの篩

その他

古代ギリシャの数学者エラトステネスが考案した素数を効率的に列挙するアルゴリズム。暗号学や数論研究の基盤技術

時間計算量:O(n log log n)
空間計算量:O(n)
難易度:★★☆☆☆

mod計算の基本

その他

剰余演算の基本的な性質と高速べき乗計算を学習する数学的アルゴリズム。暗号学とハッシュ関数の基盤技術

時間計算量:O(log n)
空間計算量:O(1)
難易度:★★☆☆☆

繰り返し二乗法

分割統治

効率的なべき乗計算を行う分割統治法ベースのアルゴリズム。指数を二進法で分解して計算量を劇的に削減

時間計算量:O(log n)
空間計算量:O(log n)
難易度:★★★☆☆

nCk組み合わせ計算

その他

組み合わせ数学の基本的な計算C(n,k)を複数の手法で効率的に実装。確率論と統計学の基盤

時間計算量:O(min(k, n-k))
空間計算量:O(1)
難易度:★★☆☆☆

ヒープ(優先度付きキュー)

データ構造

完全二分木による効率的な優先度管理。最大/最小値の高速取得と動的な優先度更新を実現する応用データ構造

時間計算量:O(log n)
空間計算量:O(n)
難易度:★★★☆☆

Union-Find(素集合データ構造)

データ構造

互いに素な集合の効率的な管理。パス圧縮とランク合併により実用的に定数時間操作を実現する応用データ構造

時間計算量:O(α(n))
空間計算量:O(n)
難易度:★★★☆☆

セグメント木

データ構造

完全二分木による範囲クエリと一点更新の効率的な処理。分割統治法の美しい実現による応用データ構造

時間計算量:O(log n)
空間計算量:O(4n)
難易度:★★★☆☆

Fenwick Tree(Binary Indexed Tree)

データ構造

ビット演算による累積和の効率的な計算。lowbit操作で実現する累積和特化の応用データ構造

時間計算量:O(log n)
空間計算量:O(n)
難易度:★★★☆☆

累積和・差分配列

その他

前処理による配列の区間操作を劇的に高速化する重要な技法。区間和クエリを O(1) で処理し、区間更新も効率的に実現

時間計算量:O(1)
空間計算量:O(n)
難易度:★★☆☆☆

スライディングウィンドウ(尺取り法)

その他

配列の連続する部分列を効率的に処理する重要な技法。固定・可変サイズのウィンドウで様々な問題を解決

時間計算量:O(n)
空間計算量:O(1)
難易度:★★☆☆☆

2 pointer法

その他

2つのポインタを使って配列を効率的に処理する重要な技法。Two Sum、回文判定、配列マージなど幅広い応用

時間計算量:O(n)
空間計算量:O(1)
難易度:★★☆☆☆

ビット全探索

その他

ビット演算を活用して効率的に全ての部分集合を探索する重要な技法。部分集合和、ナップサック問題などを解決

時間計算量:O(2^n)
空間計算量:O(n)
難易度:★★★☆☆

next_permutation(順列全列挙)

その他

辞書順で次の順列を効率的に生成する標準的なアルゴリズム。4つのステップで最小限の変更により次の順列を生成

時間計算量:O(1)
空間計算量:O(1)
難易度:★★★☆☆

ダイクストラ法

グラフ

重み付きグラフにおいて単一始点最短経路問題を解くグリーディアルゴリズム。負の重みがない場合に最適解を保証

時間計算量:O((V + E) log V)
空間計算量:O(V)
難易度:★★★☆☆

ワーシャルフロイド法

グラフ

重み付きグラフにおいて全点間最短経路問題を解く動的計画法のアルゴリズム。負の重みも扱え、負の閉路も検出可能

時間計算量:O(V³)
空間計算量:O(V²)
難易度:★★★☆☆

クラスカル法

グラフ

重み付き無向グラフから最小全域木を構築するグリーディアルゴリズム。辺を重みの小さい順に選択し、Union-Findで閉路検出

時間計算量:O(E log E)
空間計算量:O(V)
難易度:★★★☆☆

プリム法

グラフ

重み付き無向グラフから最小全域木を構築するグリーディアルゴリズム。頂点を一つずつMSTに追加していく直感的なアプローチ

時間計算量:O(E log V)
空間計算量:O(V)
難易度:★★★☆☆
🚧

さらなるアルゴリズム

A*アルゴリズム、ベルマン・フォード法
その他の高度なアルゴリズムを準備中...

🎯 効果的な学習方法

📋 学習の流れ

  1. 1. まず解説を読んで基本概念を理解
  2. 2. 可視化でアルゴリズムの動作を観察
  3. 3. 様々なケースで実際に実行してみる
  4. 4. コード例を見て実装方法を学習
  5. 5. 他のアルゴリズムとの比較検討

💡 学習のコツ

  • • 自分でケースを作って試してみる
  • • 最悪ケース・最良ケースを意識する
  • • 実生活の例と関連付けて理解する
  • • 時間計算量の意味を具体的に考える
  • • 他の人に説明できるまで理解を深める

🚀 より多くのアルゴリズムを順次追加予定です。リクエストがあればお気軽にお声がけください!