mcpField
C
computer-science-algorithms

computer-science-algorithms

github.com/pproenca開発218189 回インストール11 週間前に更新
リポジトリ

computer-science-algorithms について

古典的なアルゴリズムとデータ構造の選択・実装を支援する、開発者向けの実践的なリファレンススキルです。日常のコードレビューから大規模データ処理まで、影響度に応じて指針を整理しています。

主な機能

  1. 01優先度付きの9つの分野
  2. 02アルゴリズムと計算量の選択
  3. 03データ構造の指針
  4. 04グラフ、動的計画法、貪欲法のパターン
  5. 05ストリーミングと確率的手法

活用シーン

  1. 01入力規模に応じたアルゴリズム選択
  2. 02レビューで二次計算量の処理を発見
  3. 03グラフや動的計画法の方針選択
  4. 04ストリーミングデータや分散シャーディングへの対応

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/pproenca/dot-skills --skill computer-science-algorithms

インストール後、Claude Code で/computer-science-algorithmsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

AGENTS.md
metadata.json
assets/templates/
_template.md
references/
_sections.md
comp-amortize-instead-of-worst-casing.md
comp-derive-recurrences-via-master-theorem.md
comp-pick-algorithm-class-from-input-bound.md
comp-prefer-iterative-builders-over-string-concatenation.md
comp-treat-space-complexity-as-first-class.md
comp-watch-for-quadratic-blowup-from-membership-in-list.md
divide-meet-in-the-middle-for-subset-problems.md
divide-merge-sort-pattern-for-counting-inversions.md
divide-quickselect-vs-quicksort-partitioning.md
divide-watch-recursion-depth-and-stack.md
dp-bitmask-for-small-set-states.md
dp-define-state-precisely.md
dp-knapsack-pattern.md
dp-memoize-overlapping-subproblems.md
dp-prove-optimal-substructure-before-coding.md
dp-tabulate-when-recursion-depth-or-order-matters.md
ds-balanced-bst-or-sorted-container-for-range-queries.md
ds-deque-for-both-end-operations.md
ds-fenwick-or-segment-tree-for-mutable-range-queries.md
ds-hash-map-for-keyed-lookup.md
ds-heap-for-top-k-and-priority-queues.md
ds-prefix-sums-for-repeated-range-sums.md
ds-set-for-uniqueness-and-membership.md
ds-union-find-for-dynamic-connectivity.md
graph-bfs-for-unweighted-shortest-path.md
graph-detect-cycles-during-dfs.md

詳細

コミュニティ版・古典的コンピューターサイエンスのアルゴリズムに関するベストプラクティス

古典的なアルゴリズムやデータ構造を正しく選択し、実装するための実践者向けリファレンスです。実行ライフサイクルへの影響順に整理しています。最初の判断(漸近計算量、データ構造の選択)はその後のすべてに波及するため、表の上位にあるルールほど重要です。

対象範囲: 日常的な本番コードのレビューや、妥当な面接/コンテスト問題、そして大規模環境で使うツールボックス(スケッチ、ストリーミング、分散プリミティブ)で見られるパターンです。CLRS の内容をすべて網羅するものではありません。現行版では意図的に対象外としているトピックは、ネットワークフロー、剰余演算、単独のルールとしての Bellman-Ford と Floyd-Warshall、SCC(Tarjan/Kosaraju)、計算幾何学、FFT、単独のルールとしての Manacher/Z 関数です。これらは関連するルール内で明記しています。

CLRS(Introduction to Algorithms, 第4版)、Sedgewick & Wayne(Algorithms, 第4版、Princeton)、Skiena の Algorithm Design Manual、Laaksonen の Competitive Programmer's Handbook、cp-algorithms.com、USACO Guide をもとに要点をまとめています。

適用する場面

次のような場合に、このルールを活用してください。

  • 新しい問題に使うアルゴリズムやデータ構造を選ぶとき(「X を解くにはどうするのが適切か?」)
  • O(n²) の隠れた性能悪化がないかコードをレビューするとき — リストに対する in の繰り返しチェック、リストに対する pop(0)、ループ内での文字列連結、素朴な部分文字列検索など
  • メモ化を書く前に、DP の状態や漸化式を決めるとき
  • 問題をグラフとしてモデル化するとき(BFS、Dijkstra、トポロジカルソートのどれを使うか)
  • おもちゃのような入力では動作するものの、大規模環境ではタイムアウトする総当たり/素朴な解法をリファクタリングするとき
  • 貪欲法を適用できるか、それとも DP/分枝限定法が必要かを判断するとき

優先度別ルールカテゴリー

#カテゴリー接頭辞影響度波及する理由
1漸近計算量とアルゴリズムの選択comp-CRITICALO() のクラスを誤ると、ほかのあらゆる最適化が意味をなさなくなります
2データ構造の選択ds-CRITICALコンテナーによって、どの操作を低コストで行えるかが決まります
3ソートと検索srch-HIGH貪欲法、二ポインター法、スイープライン法、答えに対する二分探索の基礎です
4動的計画法dp-HIGH指数時間から多項式時間への変換を可能にします
5グラフアルゴリズムgraph-HIGHネットワーク、依存関係、ルーティング、スケジューリングはすべてグラフに帰着します
6分割統治法/再帰divide-MEDIUM-HIGH対数因子の高速化をもたらしますが、スタック深度や漸化式には落とし穴があります
7貪欲アルゴリズムgreedy-MEDIUM正しければ高速ですが、そうでない場合は気づかないまま誤った結果になります
8文字列/列アルゴリズムstr-MEDIUMパターンマッチング、解析、部分文字列クエリに使います
9スケール対応/確率的アルゴリズムscale-MEDIUMスケッチ、ストリーミング、分散プリミティブ — 適用場面は限られますが、当てはまる場合は決定的です

クイックリファレンス

1. 漸近計算量とアルゴリズムの選択(CRITICAL)
2. データ構造の選択(最重要)
3. ソートと検索(優先度:高)
4. 動的計画法(優先度:高)
5. グラフアルゴリズム(優先度:高)
6. 分割統治/再帰(中〜高)
7. 貪欲アルゴリズム(中)
8. 文字列・シーケンスアルゴリズム(中)
9. 大規模処理・確率的アルゴリズム(中)

「大規模処理では珍しいものの、役に立つ」ツールボックスです。わずかな精度の低下と引き換えにメモリを桁違いに節約するスケッチ、RAM に収まらない入力向けのストリーミングプリミティブ、シャーディングの変更に耐える分散データ構造が含まれます。

使い方

質問に合ったカテゴリから始めてください。

  • 「n = 10⁶ に適したアルゴリズムは何ですか?」 → comp-(入力サイズに依存)
  • 「ループ内でリストを検索しています」 → ds-hash-map-for-keyed-lookup または comp-watch-for-quadratic-blowup-from-membership-in-list
  • 「再帰が遅いです」 → dp-memoize-overlapping-subproblems と comp-derive-recurrences-via-master-theorem
  • 「最短経路/連結性/順序付けのタスク」 → graph-
  • 「価値を最大化するように項目を選ぶ」 → greedy-prove-exchange-argument-before-using から始め、うまくいかなければ dp-knapsack-pattern を使います
  • 「文字列を検索/照合する」 → str-
  • 「時間ではなくメモリが制約です」/「大規模データのサンプリング/集計/重複排除」/「シャーディング」 → scale-

コード例は Python で記述しています(幅広い読者にとって最も読みやすいためです)。考え方はどの言語にも応用できます。異なる場合は、同等の標準ライブラリ機能を記載しています。

リファレンスファイル

ファイル説明
references/_sections.mdカテゴリの定義と順序
assets/templates/_template.md新しいルール用のテンプレート
metadata.jsonバージョンとリファレンス情報
AGENTS.md自動生成された目次ナビゲーション

関連スキル

  • complexity-optimizer — これらのルールが診断するパターンを見つける静的解析

コメント