Unit 1 blog

程思博24371455 2026-03-27 11:04:49

一、度量

WMC: Weighted Method CountCBO: Coupling Between ObjectsNOM: Number Of MethodsNOA: Number Of AttributesTCC: Tight Class Cohesion
Poly69 (high)14 (high)21 (high)10.5455
MixedTerm52 (high)11 (high)21 (high)40.5167
Parser51 (high)22 (high)19 (high)40.0074 (low)
FunctionRegistry39 (high)18 (high)14 (high)40.022 (low)
CC: Cyclomatic ComplexityCND: Condition Nestling Depth
Poly.toString8 (high)/
Poly.partialDeravtive8 (high)/
Poly.needParentheses11 (high)/
Poly.addMixedTerm6 (high)/
Parser.parseFunctionCallFactor9 (high)4 (high)
Parser.parseFactor10 (high)/
FunctionRegistry.evaluateRecursive7 (high)/

注意到,几个核心类与其核心函数全部过于复杂,但似乎没有优化空间,因为功能难以进一步拆分

二、架构设计

架构一步到位

  • item包用于表示AST,并将AST转化成可计算的Poly
  • math包用于表示Poly并计算,最后给出化简后的表达式字符串
  • parser包用于解析输入,将输入转化成AST

为了更精简,实际上可以直接删除AST,让Parser直接产出Poly

假定迭代情景

假定新增三角函数sin, cos

  • 新增SinFactor和CosFactor,考虑ExpFactor, SinFactor, CosFactor是否能合并成一个
  • 在oo.math.MixedTerm中加入属性sinPoly, cosPoly
  • 更新exp双括号的逻辑
  • 在Poly中加入和差化积和积化和差以考虑潜在的优化

三、分析自己bug

exp丢双括号:情况考虑不全。没有明显复杂度问题

我使用递归toString将Poly转为字符串,但是没有遇到因此产生的bug

四、分析别人bug

根据写自己代码时关注的要点看别人是否关注到:

  • 双括号
  • Poly.equals如何实现:
    • 如果用减法实现,忽略
    • 如果用逐项判断equals实现,检查其是否保证项有序
  • exp提因子优化:gcd是否性能太差,如太差,构造大数据以尝试制造TLE,但失败

五、自己的优化

唯一优化:若第一项是负项,将其与正项交换位置。exp拆分提因子有TLE风险,故舍弃

六、大模型

  • 使用AI审查代码和自动测试
  • 使用AI做机械工作,例如:提取公共逻辑
  • 与AI讨论是否我的改动设想是否合理,是否值得改
  • AI会生成意义不明的无用内容,在步骤上需要指导,不能只给需求

七、心得体会

优化是付出100分的努力得到1分的回报

八、未来方向

去除exp和f的双括号

...全文
160 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

302

社区成员

发帖
与我相关
我的任务
社区描述
2026年北航面向对象设计与构造
java 高校
社区管理员
  • 孙琦航
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧