mcpField
A
algorithmic-complexity-review

algorithmic-complexity-review

github.com/pproencaテスト・品質218158 回インストール11 週間前に更新
リポジトリ

algorithmic-complexity-review について

コードの一般的な性能問題を見つけて改善する、言語非依存のBig-Oレビュー用スキルです。発見・分類・修正の手順で、ネストした反復、I/O、データ構造、再帰、空間計算量を扱います。

主な機能

  1. 018カテゴリの計算量問題
  2. 02コード構造からBig-Oを導出
  3. 03問題箇所を探す手掛かり
  4. 04最小差分の修正例
  5. 05実行時間と空間の落とし穴

活用シーン

  1. 01プルリクエストの性能回帰を確認
  2. 02入力の増加で遅くなる関数を調査
  3. 03ループ、再帰、I/Oを含むホットパスを改修

インストール

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

$npx skills add https://github.com/pproenca/dot-skills --skill algorithmic-complexity-review

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

同梱ファイル

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

AGENTS.md
metadata.json
README.md
assets/templates/
_template.md
references/
_sections.md
build-avoid-immutable-object-spread.md
build-avoid-quadratic-string-concat.md
build-avoid-spread-in-reducer.md
build-presize-when-length-known.md
compute-cache-expensive-pure-results.md
compute-cache-property-lookup.md
compute-defer-or-short-circuit.md
compute-hoist-loop-invariants.md
compute-precompile-regex.md
ds-counter-for-histograms.md
ds-deque-for-front-operations.md
ds-hashmap-for-keyed-access.md
ds-heap-for-top-k.md
ds-sorted-structure-for-range-queries.md
ds-trie-for-prefix-search.md
io-batch-instead-of-per-item.md
io-file-read-in-loop.md
io-missing-eager-load.md
io-n-plus-one-query.md
io-sequential-await-in-loop.md
nested-cartesian-comparison.md
nested-explicit-quadratic-loops.md
nested-find-in-loop.md
nested-includes-in-loop.md
nested-set-operations-on-arrays.md

詳細

dot-skills アルゴリズム計算量(Big-O)のベストプラクティス

コード内のアルゴリズム計算量(Big-O)の問題を、言語に依存せず特定、分類、修正します。8 つのカテゴリにわたる 39 のルールでは、本番コードで意図せず二次、指数的、N+1 の性能劣化を引き起こす大半のパターンを扱います。具体的には、ネストした反復処理、ループ不変の I/O、データ構造の不適切な選択、再帰の爆発、重複計算、コレクション構築のアンチパターン、検索・ソートの選択、メモリ使用量の落とし穴です。

適用するタイミング

次の場合にこのスキルを使用します。

  • プルリクエストや関数をレビューして、パフォーマンスの低下を確認するとき
  • 「なぜ遅いのか?」「もっと速くできますか?」と尋ねられたとき
  • ホットパスや、ユーザー数に応じて入力が増える関数をリファクタリングするとき
  • 次の要素を含むコードを読むとき:ネストしたループ、反復処理内の .includes/.find/x in list、ループ内の ORM アクセス、メモ化されていない再帰、+= やスプレッド構文による文字列・配列の構築、反復処理内のファイル/データベース I/O
  • サイズが増えていくリスト、ツリー、ストリームを処理するコードをレビューするとき

ワークフロー:特定、分類、修正

このスキルは、レビュー対象のあらゆるコードに対する 3 ステップのワークフローとして構成されています。

1. 特定 — 疑わしいパターンを探す

まず、次の構造的な兆候を探します(検出率が最も高いもの)。

兆候該当しやすいカテゴリ最初に確認するルール
2 つのネストした for ループnested-nested-explicit-quadratic-loops
ループ内の .includes/.find/x in listnested-nested-includes-in-loop
ループ内の ORM アクセス(for o in orders: o.customer.x)io-io-n-plus-one-query
for-of 内の await fetchio-io-sequential-await-in-loop
2 つの配列の「結合」に array.find を使用ds-ds-hashmap-for-keyed-access
引数が重複する再帰関数rec-rec-memoize-overlapping-subproblems
ループ内の s = s + part または [...acc, x]build-build-avoid-quadratic-string-concat、build-avoid-spread-in-reducer
ループ内で sorted(...) を呼び出すsearch-search-sort-once-outside-loop
readlines()/ファイル全体の読み込みspace-space-stream-dont-load
2. 分類 — Big-O を導き出す

コードの構造から計算量を求めます。

構造計算量
n 個の項目に対する単一ループ、O(1) の本体O(n)
n 個/m 個の項目を反復する 2 つのネストしたループO(n*m)
O(n) の操作(.includes、.find、x in list)を呼び出すループO(n*m)。多くの場合、O(n) と誤解されます
メモ化なしの再帰 f(n) = f(n-1) + f(n-2)O(2ⁿ)
再帰 f(n) = 2*f(n/2) + O(n)O(n log n)
再帰 f(n) = 2*f(n/2) + O(1)O(n)(ツリー全体の走査)
再帰 f(n) = f(n/2) + O(1)O(log n)
ループ内の s = s + partO(n²)(文字列の不変性)
reduce 内の [...acc, x]O(n²)(スプレッドによるコピー)
n 個の項目を処理するループ内のクエリ/RPCO(n) 回のラウンドトリップ

迷ったら、次のように考えてください。「入力が 2 倍になると、実行時間もおよそ 2 倍(線形)、4 倍(二次)、それ以上(指数的)になるだろうか?」 これが実用的な計算量の分類です。

3. 修正 — 該当するルールのパターンを適用する

references/ 内の各リファレンスファイルは、次の内容を含む {category}-{slug}.md 形式のファイルです。

  • そのパターンが重要な理由(連鎖的な影響)
  • コストの注釈が付いた誤ったコード例
  • 最小限の差分を示す正しい例
  • 修正を適用しない場合(ルールに例外がある場合)

最小差分を重視する方針は意図的なものです。複雑性クラスを変えるために、何行だけ変更すればよいかをエージェントが正確に把握できるようにすることが目的です。

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

#カテゴリ接頭辞影響度ルール数
1ネストした反復処理のパターンnested-重大6
2ループ不変の I/O と N+1io-重大5
3データ構造の不一致ds-高6
4再帰の複雑性rec-高5
5冗長な計算compute-中〜高5
6コレクションの構築build-中4
7検索とソートの選択search-中4
8空間計算量の落とし穴space-低〜中4

優先順位の根拠の詳細は、references/_sections.md を参照してください。

クイックリファレンス

1. ネストした反復処理のパターン(重大)
2. ループ不変の I/O と N+1 クエリ(重大)
3. データ構造の不一致(高)
4. 再帰の計算量(高)
5. 冗長な計算(中〜高)
6. コレクションの構築(中)
7. 検索とソートの選択(中)
8. 空間計算量の落とし穴(低〜中)

使用方法

  1. まず、上の Find シグナル表を確認し、該当する可能性が最も高いパターンを探します。
  2. 一致するリファレンスファイルを開き、理由と最小差分の修正を確認します。
  3. 計算量を一から分類する場合は、Classify 表を使い、コードの構造からBig-Oを導きます。
  4. 修正を提案するときは、レビュー担当者が根拠を確認できるよう、ファイルパスを示してルールを引用します。
  5. カテゴリーの順序の根拠については references/_sections.md を、新しいルールを追加する場合は assets/templates/_template.md を参照してください。

参考ファイル

ファイル説明
references/_sections.mdカテゴリの定義、影響レベル、順序付けの根拠
assets/templates/_template.md新しいルールを追加するためのテンプレート
metadata.json分野、種類、出典の参照情報

関連スキル

  • bug-review — 複数のパスで PR のバグをレビューします(このスキルは、特にパフォーマンスの問題に特化した補完スキルです)
  • 言語固有のベストプラクティススキル(React、Python、Go)— Big-O 以外のイディオムを扱います。パフォーマンスが重要なレビューでは、このスキルと組み合わせてください

コメント