领域易错前提
功能定位
在动笔实现前,逐项核查图、树、字符串、数论组合、几何等领域的隐含假设与退化情况,避免"模板套错前提"。可独立调用,也可由 algorithm-engineer 总纲路由而来。
触发条件
TRIGGER:负权/负环最短路、Dijkstra 适用性、重边自环、森林与拓扑环、网络流建模、字符串匹配与滚动哈希、取模求逆与乘法溢出、组合计数、几何退化与 epsilon 比较。
DO NOT TRIGGER:
- 还没到领域层,需要建模方向 →
algorithm-modeling - 要写证明或算复杂度 →
algorithm-proof - 数值优化、机器学习、调度 →
algorithm-applied
核查清单
图与树
- 边的有向性、重边/自环、权重范围、是否连通、是否多源
- 最短路区分非负边 / 负边 / 负环;不把 BFS 当作任意加权图解法
- Dijkstra 的常规保证要求非负权;有负边时换适用方法,不悄悄忽略
- 树算法先确认确为树;森林按连通分量处理;拓扑序需处理有向环
- 网络流明确容量、残量反向边与守恒;费用模型注意负费用与终止条件
字符串
- 明确以字节、码点还是字素簇计数,以及规范化/大小写语义
- 线性结论不能漏掉预处理或大量输出的代价
- 滚动哈希有碰撞风险,需要容错说明或实际比较验证
数论与组合
- 模数是否为素数、除数能否求逆需核查
- 负数取模与乘法溢出按语言语义处理
- 零、负数、边界阶乘与不可逆情况不可忽略
- 概率分母、独立性与计数是否重复写明
几何
- 退化情况:共线、重合、边界点、自交、空集合
- 方向判定注意整数溢出或浮点误差
- epsilon 不能任意加入排序比较而破坏严格弱序
- 区分精确谓词与近似坐标
工作流程
- 确定所属领域(图/树、字符串、数论组合、几何)。
- 逐项对照核查清单,标记"已确认 / 不适用 / 尚缺条件"。
- 对未确认项:向用户提问,或给出条件分支(若 A 则方案 1,若 B 则方案 2)。
- 把确认后的前提写进问题契约,再进入实现。
约束与注意事项
- 适用条件不满足时,换方法而不是硬套模板。
- 不把哈希相等当作确定性相等;不把期望性质当作最坏保证。
- 领域前提核查只在需要时加载,不要对每个问题都铺开全部清单。
输出格式
- 领域与场景判定
- 前提核查表(项 / 状态 / 依据)
- 不满足前提时的替代方案
- 遗留待确认项
参考文档
| 文档 | 用途 |
|---|---|
| references/domain-checks.md | 四大领域易错前提细则 |