math-skill 1.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en-US.md +280 -0
- package/README.md +280 -278
- package/agents/math-critic.md +235 -203
- package/commands/abstraction.md +13 -34
- package/commands/algorithmic-thinking.md +13 -34
- package/commands/ask.md +20 -21
- package/commands/axiomatization.md +13 -34
- package/commands/causal-inference.md +13 -34
- package/commands/discrete-combinatorial.md +13 -34
- package/commands/game-theory.md +13 -34
- package/commands/induction-analogy.md +13 -34
- package/commands/information-theory.md +13 -34
- package/commands/logic-deduction.md +13 -34
- package/commands/modeling.md +13 -37
- package/commands/optimization.md +13 -33
- package/commands/probability-statistics.md +13 -36
- package/commands/symmetry-invariance.md +13 -34
- package/commands/topological-thinking.md +13 -33
- package/commands/transformation.md +13 -33
- package/knowledge-base/overview.md +228 -230
- package/package.json +71 -59
- package/references/agentic-workflow.md +53 -0
- package/references/books/abstract-algebra.md +120 -0
- package/references/books/algebraic-geometry-rising-sea.md +167 -0
- package/references/books/differential-geometry.md +136 -0
- package/references/books/matrix-analysis.md +142 -0
- package/references/books/micro-lie-theory.md +112 -0
- package/references/books/optimization-ml.md +160 -0
- package/references/books/smooth-manifolds.md +101 -0
- package/references/gpu-friendly-math.md +65 -0
- package/skills/abstraction/SKILL.md +119 -264
- package/skills/algorithmic-thinking/SKILL.md +136 -371
- package/skills/axiomatization/SKILL.md +149 -213
- package/skills/causal-inference/SKILL.md +149 -374
- package/skills/discrete-combinatorial/SKILL.md +129 -286
- package/skills/game-theory/SKILL.md +121 -318
- package/skills/induction-analogy/SKILL.md +150 -310
- package/skills/information-theory/SKILL.md +138 -242
- package/skills/logic-deduction/SKILL.md +133 -280
- package/skills/math-research-activator/SKILL.md +134 -0
- package/skills/{meta-selector → math-research-activator}/original-texts.md +104 -104
- package/skills/modeling/SKILL.md +137 -318
- package/skills/optimization/SKILL.md +133 -292
- package/skills/probability-statistics/SKILL.md +149 -312
- package/skills/symmetry-invariance/SKILL.md +137 -358
- package/skills/topological-thinking/SKILL.md +126 -273
- package/skills/transformation/SKILL.md +122 -264
- package/docs/CLAUDE.md +0 -187
- package/skills/meta-selector/SKILL.md +0 -188
- /package/{docs → references}/inspiration.md +0 -0
|
@@ -1,371 +1,136 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: algorithmic-thinking
|
|
3
|
-
description: |
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
>
|
|
13
|
-
>
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
>
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
5.
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
规格的形式化程度应与问题的复杂性匹配——简单问题用自然语言描述即可,复杂问题需要数学定义精确的输入/输出域。检验方法:如果无法写出前置条件和后置条件的谓词,则规格尚未足够形式化。
|
|
139
|
-
|
|
140
|
-
The formality level should match the problem complexity. Test: if you cannot write pre-condition and post-condition predicates, the spec is not formal enough.
|
|
141
|
-
|
|
142
|
-
#### 生活模式 / Life Mode
|
|
143
|
-
|
|
144
|
-
明确你要做什么,期望得到什么结果——输入是什么(需要什么前提),输出是什么(期望什么成果)。
|
|
145
|
-
|
|
146
|
-
Clarify what you want to do and what result you expect — what is the input (what prerequisites are needed), what is the output (what outcome is desired).
|
|
147
|
-
|
|
148
|
-
#### 共通要点 / Shared Essentials
|
|
149
|
-
|
|
150
|
-
无论科研还是生活,第一步都必须明确:问题是什么、期望结果是什么、前提条件是什么。没有清晰的输入输出定义,后续所有步骤都会偏离方向。
|
|
151
|
-
|
|
152
|
-
Whether in research or life, the first step must clarify: what is the problem, what is the expected result, what are the prerequisites. Without clear I/O definition, all subsequent steps will drift off course.
|
|
153
|
-
|
|
154
|
-
### Step 2: 分解子问题 / Decompose into Sub-problems
|
|
155
|
-
|
|
156
|
-
#### 科研模式 / Research Mode
|
|
157
|
-
|
|
158
|
-
将大问题拆分为可独立求解的小块。子问题应边界清晰、接口明确。分解的质量直接影响算法的可理解性、可验证性和可优化性——一个好的分解使得你可以独立思考每个子问题,而不必同时操心全局。
|
|
159
|
-
|
|
160
|
-
分解策略包括:按数据分(处理不同子集)、按功能分(完成不同子任务)、按层次分(先粗后细逐层精化)。好的分解使每个子问题可独立验证,整体组合可递归验证。子问题间的依赖关系应显式标注,避免隐式耦合导致的组合错误。
|
|
161
|
-
|
|
162
|
-
Break the large problem into manageable pieces. Strategies: by data, by function, by layers. Good decomposition makes each sub-problem independently verifiable. Dependencies should be explicitly noted.
|
|
163
|
-
|
|
164
|
-
#### 生活模式 / Life Mode
|
|
165
|
-
|
|
166
|
-
把大问题拆成小步骤——每个步骤足够小,可以单独完成。复杂问题往往可以拆成一系列简单步骤。
|
|
167
|
-
|
|
168
|
-
Break big problems into small steps — each step small enough to complete independently. Complex problems can often be broken into a series of simple steps.
|
|
169
|
-
|
|
170
|
-
#### 共通要点 / Shared Essentials
|
|
171
|
-
|
|
172
|
-
分解的关键是:每个子问题/步骤应足够小以便独立处理,但不过度碎片化以致失去整体视野。好的分解让人可以专注当前一步而不必同时操心全局。
|
|
173
|
-
|
|
174
|
-
The key to decomposition: each sub-problem/step should be small enough to handle independently, but not so fragmented that the overall picture is lost. Good decomposition lets you focus on one step at a time.
|
|
175
|
-
|
|
176
|
-
### Step 3: 设计程序 / Design the Procedure
|
|
177
|
-
|
|
178
|
-
#### 科研模式 / Research Mode
|
|
179
|
-
|
|
180
|
-
选择算法范式——核心决策,范式选择错误会导致后续所有努力白费:
|
|
181
|
-
|
|
182
|
-
- **分治 (Divide-and-Conquer)**:分割、求解子部分、合并结果。适用于子问题独立、合并代价低于整体求解代价。经典实例:归并排序、快速排序、Strassen 矩阵乘法。递推关系 T(n) = aT(n/b) + f(n) 由主定理求解。
|
|
183
|
-
|
|
184
|
-
- **动态规划 (Dynamic Programming)**:重叠子问题、备忘录化避免重复计算。适用于子问题共享子结构、最优子结构成立。经典实例:最短路径、背包问题、序列对齐。
|
|
185
|
-
|
|
186
|
-
- **贪心 (Greedy)**:每步选择局部最优,期望全局最优。适用于贪心选择性质成立。经典实例:Dijkstra 算法、Huffman 编码、最小生成树。
|
|
187
|
-
|
|
188
|
-
- **回溯 (Backtracking)**:系统性搜索,遇死路则剪枝回退。适用于搜索空间有结构、可提前判断死路。经典实例:N 皇后、旅行商精确解、约束满足问题。
|
|
189
|
-
|
|
190
|
-
- **随机化 (Randomized)**:概率捷径,以随机选择换取效率。适用于确定性算法代价过高、随机采样能以高概率给出好结果。经典实例:随机快排、Monte Carlo、Las Vegas 算法。
|
|
191
|
-
|
|
192
|
-
范式选择原则:子问题独立选分治、子问题重叠选动规、贪心性质成立选贪心、搜索空间有结构选回溯、确定性代价过高选随机化。实际问题可能混合使用多种范式。
|
|
193
|
-
|
|
194
|
-
Choose a paradigm — core decision:
|
|
195
|
-
- **Divide-and-Conquer**: split, solve parts, merge. Subproblems independent, merge cost lower than whole.
|
|
196
|
-
- **Dynamic Programming**: overlapping subproblems, memoize. Optimal substructure holds.
|
|
197
|
-
- **Greedy**: locally optimal, expecting global. Greedy-choice property holds.
|
|
198
|
-
- **Backtracking**: systematic search with pruning. Search space structured.
|
|
199
|
-
- **Randomized**: probabilistic shortcuts. Deterministic cost too high.
|
|
200
|
-
|
|
201
|
-
Paradigm selection: independent → divide-and-conquer, overlapping → DP, greedy-choice → greedy, structured → backtracking, high deterministic cost → randomized. Real problems may mix paradigms.
|
|
202
|
-
|
|
203
|
-
#### 生活模式 / Life Mode
|
|
204
|
-
|
|
205
|
-
设计执行方案——常见策略:分步推进、先做最关键的部分、试错修正、从简单版本开始逐步完善。
|
|
206
|
-
|
|
207
|
-
Design an execution plan — common strategies: step-by-step progress, tackle the most critical part first, trial-and-error correction, start from a simple version and gradually improve.
|
|
208
|
-
|
|
209
|
-
#### 共通要点 / Shared Essentials
|
|
210
|
-
|
|
211
|
-
方案设计的关键是选择合适的策略来匹配问题的结构。不同类型的问题需要不同的处理方式——没有万能方法,但有适合特定问题特征的策略。
|
|
212
|
-
|
|
213
|
-
The key to procedure design is choosing a strategy that matches the problem's structure. Different problem types need different approaches — no universal method, but strategies suited to specific problem features.
|
|
214
|
-
|
|
215
|
-
### Step 4: 分析复杂度 / Analyze Complexity
|
|
216
|
-
|
|
217
|
-
#### 科研模式 / Research Mode
|
|
218
|
-
|
|
219
|
-
时间复杂度 O(f(n)),空间复杂度 O(g(n))。区分最坏情况与平均情况。大 O 符号描述增长阶而非实际耗时。
|
|
220
|
-
|
|
221
|
-
分析要点:识别基本操作计数、递推关系求解(主定理)、输入分布假设对平均复杂度的影响。除了大 O(上界),还应关注大 Ω(下界)和大 Θ(精确界)。复杂度分析不是事后验证而是设计过程中的持续评估——每一步设计都应伴随复杂度估测。
|
|
222
|
-
|
|
223
|
-
Time O(f(n)), space O(g(n)). Distinguish worst-case vs average-case. Beyond big-O (upper bound), attend to big-Ω (lower bound) and big-Θ (tight bound). Complexity analysis is ongoing evaluation during design, not post-hoc verification.
|
|
224
|
-
|
|
225
|
-
实际意义:n=10^6 时,O(n) 约 10^6 步(秒级),O(n^2) 约 10^12 步(不可行),O(2^n) 远超宇宙年龄。
|
|
226
|
-
|
|
227
|
-
Practical significance: at n=10^6, O(n) ~ 10^6 steps (seconds), O(n^2) ~ 10^12 steps (infeasible), O(2^n) far exceeds the age of the universe.
|
|
228
|
-
|
|
229
|
-
#### 生活模式 / Life Mode
|
|
230
|
-
|
|
231
|
-
评估需要多少时间和精力——粗略判断这个方案是否可行,会不会耗时过长或成本太高。
|
|
232
|
-
|
|
233
|
-
Assess how much time and effort is needed — roughly judge whether the plan is feasible, whether it will take too long or cost too much.
|
|
234
|
-
|
|
235
|
-
#### 共通要点 / Shared Essentials
|
|
236
|
-
|
|
237
|
-
复杂度分析的核心目的:在执行之前判断"是否值得做"。不评估代价的方案,往往在中途发现资源不足而被迫放弃。
|
|
238
|
-
|
|
239
|
-
The core purpose of complexity analysis: judge "is it worth doing" before execution. A plan without cost assessment often fails midway when resources run short.
|
|
240
|
-
|
|
241
|
-
### Step 5: 证明正确性 / Prove Correctness
|
|
242
|
-
|
|
243
|
-
#### 科研模式 / Research Mode
|
|
244
|
-
|
|
245
|
-
使用循环不变量、结构归纳、终止证明、前置/后置条件。未经证明的算法是猜测,不是解决方案。正确性证明是算法区别于程序的标志——程序是实现,算法是保证。
|
|
246
|
-
|
|
247
|
-
循环不变量:初始化(循环前不变量成立)、维护(每次迭代保持不变量)、终止(不变量加终止条件给出后置条件)。结构归纳:假设子调用正确,证明当前调用正确。终止证明:构造递减度量,证明每步使度量严格递减。Hoare 逻辑:{P} S {Q}——前置条件 P 经过语句 S 后产生后置条件 Q。
|
|
248
|
-
|
|
249
|
-
Use loop invariants, structural induction, termination proofs, pre/post conditions. Loop invariant: initialization, maintenance, termination. Structural induction: assume sub-calls correct, prove current call correct. Termination: decreasing measure. Hoare logic: {P} S {Q}.
|
|
250
|
-
|
|
251
|
-
#### 生活模式 / Life Mode
|
|
252
|
-
|
|
253
|
-
验证方案是否真的能解决问题——每一步是否都朝正确方向推进?有没有步骤可能走错路?
|
|
254
|
-
|
|
255
|
-
Verify whether the plan actually solves the problem — does each step move in the right direction? Are there steps that might lead down the wrong path?
|
|
256
|
-
|
|
257
|
-
#### 共通要点 / Shared Essentials
|
|
258
|
-
|
|
259
|
-
无论科研还是生活,方案必须经过验证。未经验证的方案只是猜想——可能在关键时刻失败。验证的重点是:每一步是否可靠、整体是否连贯、最终是否能达成目标。
|
|
260
|
-
|
|
261
|
-
Whether in research or life, plans must be verified. Unverified plans are conjectures — they may fail at critical moments. Verification focuses on: is each step reliable, is the whole coherent, can it achieve the goal.
|
|
262
|
-
|
|
263
|
-
### Step 6: 检查可行性 / Check Tractability
|
|
264
|
-
|
|
265
|
-
#### 科研模式 / Research Mode
|
|
266
|
-
|
|
267
|
-
问题是否属于 P?NP-hard?不可判定?若 NP-hard → 使用启发式/近似;若不可判定 → 重新表述问题。
|
|
268
|
-
|
|
269
|
-
可行性判断决定了后续所有策略:对 P 问题追求最优精确算法;对 NP-hard 问题设计近似算法或启发式,明确误差界限或概率保证;对不可判定问题寻找可判定的近似版本或受限子问题。常见 NP-hard 问题:旅行商、图着色、子集和、SAT。常见不可判定问题:停机问题、希尔伯特第十问题。
|
|
270
|
-
|
|
271
|
-
Is the problem in P? NP-hard? Undecidable? If NP-hard → heuristics/approximation; if undecidable → reformulate. Common NP-hard: TSP, graph coloring, subset sum, SAT. Common undecidable: halting problem, Hilbert's tenth problem.
|
|
272
|
-
|
|
273
|
-
#### 生活模式 / Life Mode
|
|
274
|
-
|
|
275
|
-
判断问题是否可以在合理时间内解决——有些问题注定耗时巨大,接受近似方案而非追求完美。
|
|
276
|
-
|
|
277
|
-
Judge whether the problem can be solved in a reasonable time — some problems are inherently time-consuming; accept approximate solutions rather than pursuing perfection.
|
|
278
|
-
|
|
279
|
-
#### 共通要点 / Shared Essentials
|
|
280
|
-
|
|
281
|
-
可行性检查是算法思维的标志性步骤——它问的不是"如何做",而是"是否值得做"。对不可能或代价过高的问题,调整目标比强行推进更明智。
|
|
282
|
-
|
|
283
|
-
Tractability checking is the hallmark of algorithmic thinking — it asks not "how to do" but "is it worth doing." For impossible or prohibitively costly problems, adjusting goals is wiser than pushing forward.
|
|
284
|
-
|
|
285
|
-
### Step 7: 优化与改进 / Optimize and Improve
|
|
286
|
-
|
|
287
|
-
#### 科研模式 / Research Mode
|
|
288
|
-
|
|
289
|
-
减少常数因子、利用数据结构特性、并行化。优化应基于瓶颈分析而非盲目调参。
|
|
290
|
-
|
|
291
|
-
优化层次:(1) 算法级——换更优范式(如从蛮力到分治);(2) 数据结构级——换更优存储与查询方式;(3) 实现级——缓存、并行、SIMD;(4) 问题级——换问题表述使更易求解。优化优先级:算法级收益最大(O(n^2) → O(n log n)),数据结构级次之,实现级最小但最可控,问题级可能质的飞跃。
|
|
292
|
-
|
|
293
|
-
Reduce constant factors, exploit data structure properties, parallelize. Optimization levels: (1) algorithmic — switch paradigm; (2) data structure — better storage/query; (3) implementation — caching, parallelism; (4) problem-level — reformulate. Priority: algorithmic (highest payoff), data structure, implementation, problem-level (qualitative leap possible).
|
|
294
|
-
|
|
295
|
-
#### 生活模式 / Life Mode
|
|
296
|
-
|
|
297
|
-
优化执行效率——消除重复步骤、合并相似任务、找到更快的方法完成每一步。
|
|
298
|
-
|
|
299
|
-
Optimize execution efficiency — eliminate redundant steps, merge similar tasks, find faster ways to complete each step.
|
|
300
|
-
|
|
301
|
-
#### 共通要点 / Shared Essentials
|
|
302
|
-
|
|
303
|
-
优化的原则:先确保方案正确可行,再追求高效。过早优化是浪费——方向正确但低效胜过方向错误但高效。每次优化后必须重新验证正确性。
|
|
304
|
-
|
|
305
|
-
Optimization principle: ensure correctness and feasibility first, then pursue efficiency. Premature optimization is waste — correctly directed but slow beats incorrectly directed but fast. Re-verify after each optimization.
|
|
306
|
-
|
|
307
|
-
## 常见错误 / Common Errors
|
|
308
|
-
|
|
309
|
-
| 错误 / Error | 数学批评 / Mathematical Critique | 正确做法 / Correct Approach |
|
|
310
|
-
|---|---|---|
|
|
311
|
-
| 假设指数算法可接受 `[科研]` | NP-hard问题对大n需要启发式而非精确算法;2^50步即使每步1ns也需35年 | 对大n问题用近似或启发式,明确误差界限 |
|
|
312
|
-
| 未证明终止性 `[科研]` | 无限循环是真实风险;程序挂起远比慢速结果更危险 | 用递减度量证明终止,构造良序集上的递减函数 |
|
|
313
|
-
| 忽略最坏与平均情况区别 `[科研]` | 快排最坏O(n²)但平均O(n log n);最坏情况可能在实际中出现 | 明确分析场景,注明假设条件 |
|
|
314
|
-
| 混淆存在性与可构造性 `[科研]` | 解可能存在但不可计算;存在性≠可构造性是计算理论的基本分界 | 区分存在性证明与算法构造,明确算法输出 |
|
|
315
|
-
| 低估常数因子影响 `[科研/通用]` | 带巨大常数的O(n log n)可能比带小常数的O(n²)慢;理论最优≠实际最优 | 实际测试比较,关注常数因子与缓存效应 |
|
|
316
|
-
| 忽略空间复杂度 `[科研]` | 时间高效的算法可能消耗不可接受的内存;DFS需O(n)空间但BFS需O(2^n) | 同时分析时间与空间,标注空间限制 |
|
|
317
|
-
| 过早优化 `[通用]` | 未证正确就优化方向可能全错;优化错误算法是双重浪费 | 先证正确再析复杂度最后才优化 |
|
|
318
|
-
| 忽视输入分布 `[科研/通用]` | 平均复杂度依赖输入分布假设;随机输入≠实际输入 | 标明分布假设,分析实际场景下的表现 |
|
|
319
|
-
| 不评估可行性就开始执行 `[生活]` | 不判断是否值得做就开始做,往往中途发现资源不足而被迫放弃 | 先评估时间和精力需求,判断可行性再启动 |
|
|
320
|
-
| 方案过于复杂无法实际操作 `[生活]` | 过度设计导致执行困难,步骤太多反而无法推进 | 保持方案简洁,每一步都能实际完成 |
|
|
321
|
-
| 追求完美方案而忽略可行性 `[生活]` | 某些问题注定耗时巨大,追求完美反而无法完成任何实质进展 | 接受"足够好"的近似方案,优先完成而非完美 |
|
|
322
|
-
|
|
323
|
-
## 操作规程 / Operating Procedure
|
|
324
|
-
|
|
325
|
-
每次使用算法思维分析问题时,根据场景选择模式:
|
|
326
|
-
|
|
327
|
-
**科研模式**——用于算法设计、复杂度分析、可计算性判定等学术场景,必须按照以下格式输出完整结论。每项之间用换行分隔,不可合并或省略:
|
|
328
|
-
|
|
329
|
-
1. **输入规格**:[输入]: [描述] — 例如:[输入]: 无序整数数组 A[1..n],n ∈ [1, 10^6]
|
|
330
|
-
|
|
331
|
-
2. **输出规格**:[输出]: [描述] — 例如:[输出]: A 的升序排列
|
|
332
|
-
|
|
333
|
-
3. **算法范式**:[范式]: [分治/动规/贪心/回溯/随机化] 因为 [理由] — 例如:[范式]: 分治 因为 子问题独立且合并代价 O(n)
|
|
334
|
-
|
|
335
|
-
4. **复杂度**:[时间]: O([f(n)]) [空间]: O([g(n)]) [场景]: [最坏/平均] — 例如:[时间]: O(n log n) [空间]: O(n) [场景]: 最坏
|
|
336
|
-
|
|
337
|
-
5. **正确性**:[循环不变量/归纳策略]: [具体内容] ✅ 已证 或 ❌ 未证 — 例如:[循环不变量]: 合并前两部分各自有序 ✅ 已证
|
|
338
|
-
|
|
339
|
-
6. **可行性**:[类别]: [P/NP-hard/不可判定] [应对]: [精确/近似/启发式/重新表述] — 例如:[类别]: P [应对]: 精确算法
|
|
340
|
-
|
|
341
|
-
7. **改进建议**:[优化方向]: [具体建议] — 例如:[优化方向]: 实现级 → 用原地归并减少空间至 O(1)
|
|
342
|
-
|
|
343
|
-
**科研模式输出必须包含以上 7 项,不得只输出分析性文字而不给出结论。**
|
|
344
|
-
|
|
345
|
-
---
|
|
346
|
-
|
|
347
|
-
**生活模式**——用于设计高效工作流程、自动化重复任务、评估计划可行性等日常场景,按照以下格式输出。每项之间用换行分隔,不可合并或省略:
|
|
348
|
-
|
|
349
|
-
1. **[目标与前提]:[明确]** — 要做什么,需要什么前提条件。例如:[目标与前提]:[明确] 完成季度报告,前提是有原始数据和模板
|
|
350
|
-
|
|
351
|
-
2. **[步骤分解]:[列表]** — 把问题拆成可执行的小步骤。例如:[步骤分解]:[列表] 1.收集数据 2.整理格式 3.填充模板 4.审核校对
|
|
352
|
-
|
|
353
|
-
3. **[可行方案]:[设计]** — 选择最合适的执行策略。例如:[可行方案]:[设计] 分步推进——先完成数据收集再逐步填充
|
|
354
|
-
|
|
355
|
-
4. **[成本评估]:[粗略]** — 需要多少时间、精力、资源。例如:[成本评估]:[粗略] 约3小时,需集中注意力,无需额外资源
|
|
356
|
-
|
|
357
|
-
5. **[可行性判断]:[结论]** — 方案是否可以在合理条件下完成。例如:[可行性判断]:[结论] 可行——时间充足、资源齐备、步骤清晰
|
|
358
|
-
|
|
359
|
-
6. **[行动建议]:[步骤]** — 具体执行的第一步是什么。例如:[行动建议]:[步骤] 立即开始数据收集,预计30分钟完成
|
|
360
|
-
|
|
361
|
-
**生活模式输出必须包含以上 6 项,不得只输出分析性文字而不给出结论。**
|
|
362
|
-
|
|
363
|
-
## 与其他 skill 的关系 / Relations to Other Skills
|
|
364
|
-
|
|
365
|
-
算法思维与其他数学思维方法存在深层联系,理解这些联系有助于在恰当场景选择恰当的思维工具:
|
|
366
|
-
|
|
367
|
-
- **优化思想**:许多优化算法是算法思想的具体实例(梯度下降、分支定界)——优化思想关注目标函数的最优值,算法思想关注达到最优值的步骤与代价
|
|
368
|
-
- **变换思想**:FFT是算法思想应用于变换的典范——O(n log n) vs O(n²)——变换将问题映射到易解空间,算法在变换空间高效求解
|
|
369
|
-
- **逻辑演绎**:正确性证明使用演绎推理(循环不变量、归纳)——算法的正确性证明本质上是一系列演绎推理步骤的链
|
|
370
|
-
- **归纳与类比**:分治策略使用结构类比——子问题与原问题同构——这正是归纳思想的算法化体现
|
|
371
|
-
- **离散/组合思想**:算法处理离散对象,组合计数支撑复杂度分析——组合爆炸的计算正是算法思维需要克服的核心障碍
|
|
1
|
+
---
|
|
2
|
+
name: algorithmic-thinking
|
|
3
|
+
description: |
|
|
4
|
+
触发:问题需要有限步骤求解、算法设计、复杂度分析(时间/空间)、可行性与并行性评估(P/NP-hard/不可判定);或需证明终止性/正确性;或为 GPU 设计可执行算法/算子(评估复杂度阶、并行度、访存与融合)时调用。
|
|
5
|
+
English: Trigger when a problem needs finite-step solving, algorithm design, complexity analysis (time/space), tractability & parallelism assessment (P/NP-hard/undecidable); or termination/correctness proofs; or designing executable algorithms/operators for GPU (assessing complexity order, parallelism, memory access & fusion).
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 🖥️ 算法与计算思想 / Algorithmic Thinking
|
|
9
|
+
|
|
10
|
+
> "算法是思想的自动化——将洞察转化为可重复执行的精确步骤。"
|
|
11
|
+
> "An algorithm is the automation of thought — turning insight into precisely repeatable steps."
|
|
12
|
+
>
|
|
13
|
+
> —— 计算理论、算法分析、复杂度理论 / Computability Theory, Algorithm Analysis, Complexity Theory
|
|
14
|
+
|
|
15
|
+
## 核心原则 / Core Principle
|
|
16
|
+
|
|
17
|
+
**把问题拆解为可执行步骤,评估代价,判断可行性。算法思想的第一原则不是"如何求解",而是"是否可解、代价几何"——某些问题本质困难(NP 完全),某些本质不可解(不可判定),了解这些极限与找到解同样重要。**
|
|
18
|
+
|
|
19
|
+
**Break problems into executable steps, assess cost, judge feasibility. The first principle is not "how to solve" but "whether it is solvable and at what cost" — some problems are inherently hard (NP-complete), some inherently unsolvable (undecidable); knowing these limits is as important as finding solutions.**
|
|
20
|
+
|
|
21
|
+
> **数学形式化 / Mathematical Formalization**
|
|
22
|
+
>
|
|
23
|
+
> 图灵机 M: Σ* → Σ* 在有限步骤内停机。时间复杂度 T(n) = 长度为 n 的输入的最大执行步数;空间复杂度 S(n) = 最大使用单元数。丘奇-图灵论题:任何可计算的都可由图灵机计算。
|
|
24
|
+
>
|
|
25
|
+
> 三级层次:可计算(算法存在)→ 可行(多项式时间算法存在)→ 难解(仅指数时间或无算法)。可计算但不可行在实践中等同不可计算——蛮力 2^n 对 n=100 毫无价值。P vs NP 正是可行与难解的分界。
|
|
26
|
+
>
|
|
27
|
+
> 复杂度符号:O(f(n)) 上界,Ω(f(n)) 下界,Θ(f(n)) 精确界。常见递推:T(n)=2T(n/2)+O(n)→O(n log n);T(n)=T(n-1)+O(n)→O(n²);T(n)=T(n/2)+O(1)→O(log n)。复杂度类:O(1)⊂O(log n)⊂O(n)⊂O(n log n)⊂O(n^k)⊂O(2^n)⊂O(n!)。
|
|
28
|
+
>
|
|
29
|
+
> 复杂度类定义:P = 多项式时间可判定;NP-hard = 至少与所有 NP 问题同等困难;不可判定 = 无任何算法可判定。NP-hard 应对:近似(误差界限)或启发式(概率保证);不可判定应对:寻找可判定的受限版本。
|
|
30
|
+
>
|
|
31
|
+
> 循环不变量:每次迭代前后成立的性质,加终止条件蕴含输出正确。Hoare 逻辑:{P} S {Q}——前置条件 P 经语句 S 产生后置条件 Q。
|
|
32
|
+
|
|
33
|
+
## GPU 友好性 / GPU-Friendliness(横切检查)
|
|
34
|
+
|
|
35
|
+
算法思想是与 GPU 最直接相关的武器——复杂度阶、并行度、访存/通信、算子融合直接决定一个算法能否在 GPU 上高效跑起来。每个算法须过 `../../references/gpu-friendly-math.md` 八维门:
|
|
36
|
+
|
|
37
|
+
- **复杂度阶**:亚二次 O(n log n)/O(n) 友好(吃满并行核);O(n²) 边界(GEMM 例外,Tensor Core 可救);O(2^n)/O(n!) 反模式。
|
|
38
|
+
- **并行与通信**:分治/数据并行友好(子问题独立、可批量);动规的依赖链、回溯的串行搜索需改造(分块/斜扫描)。
|
|
39
|
+
- **显存与 KV-Cache / 并行与通信**:coalesced 访问友好;butterfly 归约、前缀扫描的依赖需注意带宽;随机 scatter/gather 不友好。
|
|
40
|
+
- **算子融合**:多步 elementwise 可融合为单 kernel;反复读写显存的"美丽但不可算"算法应重排为一次过。
|
|
41
|
+
|
|
42
|
+
八维最低判定(正式术语):**张量化**要求主循环可批量化;**GEMM 可映射**优先把核心计算写成 GEMM/conv/scan;**复杂度**必须给时间与空间阶;**显存与 KV-Cache**检查中间表、状态、缓存是否可分块;**低精度稳定**检查归约、排序、迭代误差;**并行与通信**检查依赖图与跨设备同步;**稀疏结构**只接受结构化稀疏;**算子融合**要求减少小 kernel 与往返显存。
|
|
43
|
+
|
|
44
|
+
| 算法特征 | GPU 分类 | 说明 |
|
|
45
|
+
|---|---|---|
|
|
46
|
+
| 分治/归并/FFT | 友好 | 亚二次、可批量、结构规则 |
|
|
47
|
+
| 动规(依赖链) | 可改造 | 分块/斜扫描打破串行依赖 |
|
|
48
|
+
| 回溯/DFS 串行搜索 | 反模式 | 分支不可预测、无法填满 SIMD |
|
|
49
|
+
| 蛮力 O(2^n) | 反模式 | 复杂度阶本身不可算 |
|
|
50
|
+
|
|
51
|
+
> 配合 `../../references/books/matrix-analysis.md`(GEMM/低秩分解降阶)、`../../references/books/optimization-ml.md`(一阶/二阶法可行性)、`../../references/books/abstract-algebra.md`(半环/有限域上的并行算法)。
|
|
52
|
+
|
|
53
|
+
## 不适用场景 / When NOT to Use
|
|
54
|
+
|
|
55
|
+
- **问题有闭式解,不需要逐步计算**——如二次方程求根公式直接给答案,算法化反增复杂度。
|
|
56
|
+
- **问题本质是定性的而非程序性的**——如"这个结构是否优美""这个证明是否有洞察力"无法化为有限步骤。
|
|
57
|
+
- **输入无结构、无法离散化**——如连续感知数据流无法直接作为算法输入;预处理比核心问题更复杂时算法化未必最优。
|
|
58
|
+
|
|
59
|
+
## 何时使用 / When to Use
|
|
60
|
+
|
|
61
|
+
- 需要自动化重复过程——同一操作对大量数据反复执行,手动不可扩展。
|
|
62
|
+
- 需要验证程序终止——证明算法在有限步内停机,是可靠性的基石。
|
|
63
|
+
- 需要估算计算代价——大规模运行前评估时间/空间消耗,避免资源耗尽。
|
|
64
|
+
- 面对组合爆炸——搜索空间随输入指数增长,需剪枝策略。
|
|
65
|
+
- 需要判断问题可行性——确定 P / NP-hard / 不可判定,决定求解策略。
|
|
66
|
+
- 需要设计高效求解步骤——从蛮力到精巧算法,效率差异可达数个量级。
|
|
67
|
+
- **为 GPU 设计可执行算法/算子**——评估复杂度阶、并行度、访存与融合,使算法在硬件上真正可算。
|
|
68
|
+
|
|
69
|
+
## 方法流程 / Method
|
|
70
|
+
|
|
71
|
+
### 第一步:形式化输入输出规格 / Formalize I/O Spec
|
|
72
|
+
定义输入域、输出域、约束条件。输入规格明确数据类型(整数/浮点/字符串/图)、规模范围 n∈[1,10^6]、合法性条件(前置条件);输出规格明确返回类型、精度、边界处理;约束覆盖时间/空间限制与正确性保证(后置条件)。检验:若写不出前置/后置条件谓词,则规格尚未足够形式化。
|
|
73
|
+
|
|
74
|
+
### 第二步:分解子问题 / Decompose into Sub-problems
|
|
75
|
+
将大问题拆为可独立求解的小块,子问题边界清晰、接口明确。分解策略:按数据(处理不同子集)、按功能(完成不同子任务)、按层次(先粗后细逐层精化)。好的分解使每个子问题可独立验证,整体可递归验证;子问题间依赖须显式标注,避免隐式耦合。
|
|
76
|
+
|
|
77
|
+
### 第三步:设计程序 / Design the Procedure
|
|
78
|
+
选择算法范式——核心决策,选错则后续努力白费:
|
|
79
|
+
|
|
80
|
+
- **分治 (Divide-and-Conquer)**:分割、求解子部分、合并。子问题独立、合并代价低于整体。经典:归并/快速排序、Strassen 矩阵乘。递推 T(n)=aT(n/b)+f(n) 由主定理求解。
|
|
81
|
+
- **动态规划 (DP)**:重叠子问题、备忘录化避免重复。最优子结构成立。经典:最短路、背包、序列对齐。
|
|
82
|
+
- **贪心 (Greedy)**:每步局部最优,期望全局。贪心选择性质成立。经典:Dijkstra、Huffman、MST。
|
|
83
|
+
- **回溯 (Backtracking)**:系统性搜索、遇死路剪枝回退。搜索空间有结构。经典:N 皇后、TSP 精确解、CSP。
|
|
84
|
+
- **随机化 (Randomized)**:概率捷径,以随机换效率。确定性代价过高。经典:随机快排、Monte Carlo、Las Vegas。
|
|
85
|
+
|
|
86
|
+
选择原则:独立→分治、重叠→动规、贪心性质→贪心、结构化搜索→回溯、确定性代价过高→随机化。实际问题常混合多种范式。
|
|
87
|
+
|
|
88
|
+
### 第四步:分析复杂度 / Analyze Complexity
|
|
89
|
+
时间 O(f(n))、空间 O(g(n)),区分最坏与平均。识别基本操作计数、求解递推(主定理)、关注输入分布对平均复杂度的影响;除 O(上界)外关注 Ω(下界)与 Θ(精确界)。复杂度分析是设计中的持续评估,非事后验证。实际意义:n=10^6 时 O(n)≈10^6 步(秒级),O(n²)≈10^12 步(不可行),O(2^n) 远超宇宙年龄。
|
|
90
|
+
|
|
91
|
+
### 第五步:证明正确性 / Prove Correctness
|
|
92
|
+
使用循环不变量、结构归纳、终止证明、前置/后置条件。未经证明的算法是猜测。循环不变量:初始化(循环前成立)、维护(每次迭代保持)、终止(不变量加终止条件给后置条件);结构归纳:假设子调用正确证当前调用;终止:构造递减度量证其严格递减;Hoare 逻辑:{P} S {Q}。
|
|
93
|
+
|
|
94
|
+
### 第六步:检查可行性 / Check Tractability
|
|
95
|
+
问题属 P?NP-hard?不可判定?P → 追求最优精确算法;NP-hard → 近似/启发式,明确误差界限或概率保证;不可判定 → 寻找可判定的受限版本。常见 NP-hard:TSP、图着色、子集和、SAT;常见不可判定:停机问题、希尔伯特第十问题。
|
|
96
|
+
|
|
97
|
+
### 第七步:优化与改进 / Optimize and Improve
|
|
98
|
+
减少常数因子、利用数据结构、并行化,基于瓶颈分析而非盲目调参。优化层次:(1) 算法级——换更优范式(O(n²)→O(n log n) 收益最大);(2) 数据结构级——换更优存储/查询;(3) 实现级——缓存、并行、SIMD、算子融合;(4) 问题级——换表述使更易求解(可能质的飞跃)。优先级:算法级 > 数据结构级 > 实现级,问题级可能跃迁。每次优化后重新验证正确性。
|
|
99
|
+
|
|
100
|
+
## 常见错误 / Common Errors
|
|
101
|
+
|
|
102
|
+
| 错误 / Error | 批评 / Critique | 正确做法 / Correct Approach |
|
|
103
|
+
|---|---|---|
|
|
104
|
+
| 假设指数算法可接受 | NP-hard 对大 n 需启发式而非精确;2^50 步即使每步 1ns 需 35 年 | 对大 n 用近似/启发式,明确误差界限 |
|
|
105
|
+
| 未证明终止性 | 无限循环是真实风险,挂起远比慢结果危险 | 用递减度量证终止,构造良序集上递减函数 |
|
|
106
|
+
| 混淆最坏与平均情况 | 快排最坏 O(n²) 但平均 O(n log n),最坏可能在实中出现 | 明确分析场景,注明假设 |
|
|
107
|
+
| 混淆存在性与可构造性 | 解可能存在但不可计算;存在性≠可构造性 | 区分存在性证明与算法构造 |
|
|
108
|
+
| 低估常数因子 | 巨大常数的 O(n log n) 可能比小常数 O(n²) 慢 | 实测比较,关注常数与缓存效应 |
|
|
109
|
+
| 忽略空间复杂度 | 时间高效的算法可能爆内存;DFS 需 O(n) 但 BFS 需 O(2^n) | 同时分析时间与空间 |
|
|
110
|
+
| 过早优化 | 未证正确就优化,方向可能全错 | 先证正确→析复杂度→再优化 |
|
|
111
|
+
| 忽视输入分布 | 平均复杂度依赖分布假设,随机输入≠实际输入 | 标明分布假设,分析实际场景 |
|
|
112
|
+
| 串行/不可融合算法上 GPU | 分支不可预测、依赖链串行、反复读写显存——"美但不可算" | 改造为并行/可融合/亚二次,过 GPU 八维门 |
|
|
113
|
+
|
|
114
|
+
## 操作规程 / Operating Procedure
|
|
115
|
+
|
|
116
|
+
当本 skill 被触发时,输出必须包含:
|
|
117
|
+
|
|
118
|
+
1. **输入规格**:`[输入]: [描述]` — 例如:`[输入]: 无序整数数组 A[1..n],n∈[1,10^6]`
|
|
119
|
+
2. **输出规格**:`[输出]: [描述]` — 例如:`[输出]: A 的升序排列`
|
|
120
|
+
3. **算法范式**:`[范式]: [分治/动规/贪心/回溯/随机化] 因为 [理由]`
|
|
121
|
+
4. **复杂度**:`[时间]: O([f(n)]) [空间]: O([g(n)]) [场景]: [最坏/平均]`
|
|
122
|
+
5. **正确性**:`[循环不变量/归纳策略]: [内容] ✅ 已证 / ❌ 未证`
|
|
123
|
+
6. **可行性**:`[类别]: [P/NP-hard/不可判定] [应对]: [精确/近似/启发式/重新表述]`
|
|
124
|
+
7. **改进建议**:`[优化方向]: [具体建议]`
|
|
125
|
+
8. **[GPU 可行性]**(若用于算法/算子设计)— 复杂度阶/并行度/访存/融合评估,标注友好/可改造/反模式 + 改造建议
|
|
126
|
+
|
|
127
|
+
**输出不得只给分析而无结论。**
|
|
128
|
+
|
|
129
|
+
## 与其他 skill 的关系 / Relations to Other Skills
|
|
130
|
+
|
|
131
|
+
- **优化思想**:梯度下降、分支定界等优化算法是算法思想的实例——优化关注最优值,算法关注达到最优值的步骤与代价。
|
|
132
|
+
- **变换思想**:FFT 是算法思想应用于变换的典范——O(n²)→O(n log n);变换把问题映到易解空间,算法在变换空间高效求解。
|
|
133
|
+
- **逻辑演绎**:正确性证明使用演绎推理(循环不变量、归纳)——算法正确性证明本质是一串演绎步骤。
|
|
134
|
+
- **归纳与类比**:分治用结构类比——子问题与原问题同构——正是归纳思想的算法化。
|
|
135
|
+
- **离散/组合思想**:算法处理离散对象,组合计数支撑复杂度分析——组合爆炸是算法思维要克服的核心障碍。
|
|
136
|
+
- **现代数学激活**:`../../references/books/matrix-analysis.md`(GEMM/低秩分解降阶)、`../../references/books/optimization-ml.md`(一阶/二阶法 GPU 可行性)、`../../references/books/abstract-algebra.md`(半环/有限域上的并行算法)。
|