コンテンツにスキップ

アルゴリズムを学ぶ

アルゴリズムに関する記事を以下の観点でカテゴリ分けしています。また、各カテゴリでは、入門・基礎的な内容から応用・発展的な内容となるよう整理しています。

  • アルゴリズムと実生活
  • 全探索
  • 頻出テクニック
  • DP (動的計画法)
  • データ構造
  • グラフ理論
  • 文字列
  • その他

参考

カテゴリやサブカテゴリによっては、中・上級者向けの内容も含まれています。 難しすぎる内容だと思ったときは、少し時間を置いて読み直してみましょう。

アルゴリズムと実生活

全探索

基礎

計算量

再帰関数

深さ優先探索・幅優先探索

bit全探索

問題集

頻出テクニック

ソート

二分探索

累積和

尺取り法

ダブリング

DP (動的計画法)

入門・基礎

bitDP

桁DP

部分列DP

確率DP・期待値DP

DPの高速化

全方位木DP

その他

データ構造

連想配列

Union-Find木

セグメント木

Fenwick tree (BIT)

平方分割

Trie木

  • すごいTrie - 文字列の集合を高速に検索できるデータ構造Trieを解説した記事。Pythonでの実装例や応用例も紹介されている。
  • 非負整数値を扱うTrieについて - 非負整数をビット列とみなしてTrie木のような形で保持するデータ構造を紹介した記事。C++による実装例や例題も掲載されている。

平衡二分探索木

Heavy-Light Decomposition

ゼータ変換・素数ゼータ変換・高速ゼータ変換

Mo's algorithm

  • はじめての Mo's Algorithm - 区間に対するクエリを高速に処理するアルゴリズム「Mo's Algorithm」が丁寧に解説されている記事。同アルゴリズムの図解・適用可能な問題・計算量解析・実装例(Python)や類題などが紹介されている。
  • Mo's algorithm - アルゴリズムの概説と実装例および類題が紹介されている記事。
  • Mo's algorithm とその上位互換の話 - より汎用性の高いアルゴリズム(Rollback機能の追加)が紹介されている記事。
  • 定数倍が最適な Mo's Algorithm - 計算量が最悪となるケース(端部の移動)に着目して、アルゴリズムを改善している記事。

IntervalSet

Cartesian木

計算量解析

正式名称と略語

グラフ理論

基礎

  • グラフ理論の基礎 - グラフ理論の基礎的な知識・概念について、都道府県の県庁所在地の緯度・経度データを題材に分かりやすく解説されている記事。

    注意

    一部の実装例がPython2で書かれているため、Python3の文法で書き直す必要がある。

最短経路問題

最小全域木問題

サイクル検出問題

二部グラフ判定問題

ネットワークフロー

問題をグラフとして捉え直す


文字列

文字列検索

問題集

  • 独立に考える:x軸とy軸 - drkenさんによる過去問の解説集。x軸とy軸を独立に扱うことで考察・実装がしやすくなる問題がまとめられている。

三分探索

スライド最大値(最小値)・ヒストグラム内最大長方形問題

乱択アルゴリズムによる高速化