← ClaudeAtlas

algorithm-first-disciplinelisted

当编写/审查含循环、查询、连接、递归或集合遍历(n 超过个位数)的代码时使用;动作:在写代码前先声明时间/空间复杂度、数据结构、算法族,按七步预写协议产出有复杂度论证的实现;不适用于 n<10 的平凡集合、一次性初始化代码、纯性能 profiling/常数因子调优。触发词:嵌套循环、N+1、includes/find 在循环里、await in loop、SELECT *、O(n^2)、Big-O。
findscripter/everything-skills · ★ 3 · AI & Automation · score 65
Install: claude install-skill findscripter/everything-skills
## 何时使用 模型本就懂 Big-O、哈希表、分治、动态规划、排序、图算法、摊还分析——它只是不会主动去用。本技能修的是**行为**,不是知识。它是「算法纪律」套件的网关:自身管经典的日常算法纪律,必要时再升级到三个兄弟技能。 **该用的场景:** - 编写、修改或审查涉及循环、集合、查找、搜索、连接、递归、图、查询,或任何对超过个位数个元素做计算的代码。 - 即将写 `for` 套 `for`、在循环里调 `.find`/`.includes`/`.indexOf`、对独立元素在 `for`/`map`/`forEach` 里 `await`、或对集合每项发一次查询。 - 审计代码库/PR 中的已知反模式(await-in-loop、`.includes` 套在 `.filter` 里、循环里字符串拼接、`SELECT *`、N+1 等)。 - 复审「看着很地道」但可能藏着 O(n²) 或 N+1 的 AI 生成代码。 **不该用的边界(明确豁免):** - `n < ~10` 的平凡集合、一次性 setup 代码——别为 `for i in range(3)` 浪费时间写复杂度。 - 常数因子优化、延迟尾部、I/O 瓶颈——这要 profiler,本技能��管渐进复杂度,不是测量工具。 - 自动重写已上线的慢代码——那是 `complexity-cuts` 的活;本技能是「写之前」的推理闸门,不改既有代码。 - 故意的暴力解——只要作者写下一行理由(如「实践中 n≤100,可读性优先」),暴力解可以放行;本技能只要求那行理由存在。 **违反规则的字面,就是违反技能的精神。**「就这一次」正是 O(n²) 上生产的方式。 ## 步骤 **铁律:没有声明复杂度、数据结构、算法族,不写任何非平凡代码。** 在写循环/递归/查询前,消息里必须**按此顺序**出现七步预写协议: 1. **问题形状** —— 一句话。(如「给定 n 个带时间戳的事件,求总权重 ≤ K 的最长连续窗口」。) 2. **输入维度** —— `n = ?`,真实量级(如 `n ~ 10^6 行`),是否热路径。 3. **目标复杂度** —— `time = O(?)`,`space = O(?)`,点名主导输入维度。 4. **数据结构** —— 每个集合形态的值都从 `Array/List/Set/HashMap/TreeMap/Heap/Deque/Trie/Graph/BitSet/Counter/LinkedList` 中刻意选一个,附一句理由(如「Set 用于循环内 O(1) 成员判断」「Heap 用于 top-K 的 O(n log k)」)。循环内查找默认用哈希结构(Set/Map);n 大时默认流式/迭代器而非物化整表。 5. **算法族** —— 从这些里点一个:`linear scan / divide and conquer / two-pointer / sliding window / binary search / sort + sweep / hash join / BFS/DFS / topological sort / Dijkstra/A* / union-find / dynamic programming / greedy / recursion + memoization / prefix sum / segment tree / monoid reduction`。点不出来,就是要写暴力解,停下重想。 6. **