mcpField
A
algorithmic-complexity-review

algorithmic-complexity-review

github.com/pproenca测试与质量218158 次安装11 周前更新
代码仓库

关于 algorithmic-complexity-review

面向代码审查和性能排查的语言无关 Big-O 复杂度检查技能,帮助定位并改进常见的性能陷阱。它采用发现、分类、修复流程,涵盖嵌套迭代、I/O、数据结构、递归和空间复杂度等模式。

主要功能

  1. 01覆盖 8 类复杂度问题
  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
  • 审查处理列表、树或流的代码,且其规模会不断增长

工作流:查找、分类、修复

此技能针对任何待审查代码,按三个步骤组织工作流:

1. 查找 — 扫描可疑模式

优先查找以下结构信号(命中率最高):

信号可能的类别首先检查的规则
两层嵌套的 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
使用 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 个项目的两层嵌套循环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) 次往返

拿不准时,问自己:“输入翻倍时,运行时间大约会翻倍(线性)、变为四倍(二次),还是增长得更快(指数级)?” 这就是实用的复杂度类别。

3. 修复 — 应用匹配规则中的模式

references/ 中的每个参考文件都是一个 {category}-{slug}.md,包含:

  • 模式为何重要(级联效应)
  • 一个标注了代价的 Incorrect 代码示例
  • 一个展示最小差异的 Correct 示例
  • 何时不应应用此修复(规则存在例外)

刻意采用最小差异理念:目标是让 Agent 清楚看到,只需修改多少行就能改变复杂度类别。

按优先级排列的规则类别

#类别前缀影响规则数
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. 打开匹配的参考文件,查看原因(WHY)和最小差异修复方案。
  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 Bug 审查(这项技能专注于性能问题,可作为其补充)
  • 某种语言的最佳实践技能(React、Python、Go)——涵盖 Big-O 之外的惯用法;对于性能关键型审查,可与这项技能搭配使用

评论

支持 Markdown