OO - 第一单元总结

王静初-20374329 2024-03-22 19:02:17

目录

需求分析

代码架构

hw1

hw2

hw3

bug们

不存在的优化

总结


需求分析

第一单元主任务:单变量多项式的括号展开。

在hw1中,仅需将一个包含+、-、*、^以及括号(单层)的单变量表达式,输出展开所有括号的结果。

hw2新增了多层括号,自定义函数因子和指数函数因子。

hw3新增求导算子。

代码架构

hw1

采用了递归下降法。一个表达式可以拆分成若干项(由+、-符号连接),因子可以分为表达式因子,数字和幂函数。在完全化简后,表达式由若干以下项构成,即c*x^n。

我的主要思路是,先解析表达式,再利用基本项的性质运算,最后输出。UML类图如下。

 Factor接口下的类是递归下降方法的核心。Power类存储形如c*x^n的项,Poly类负责运算工作。

类复杂度如下。Poly类的基本复杂度较高,大概是因为我将全部的运算,以及部分输出表达式工作写在了Poly里。

hw2

在第一次作业的基础上,新增了自定义函数类。对于输入表达式中的的自定义函数,采取带入实参替换的方式预处理。修改Power类的定义,用hashmap存储exp。修改Poly类,新增有关exp的运算。

需要注意,在替换时处理exp与x的关系,以及先将形参替换成其他字母,再替换实参。复杂度问题与hw1类似。

 

hw3

新增求导算子。这部分需要注意的问题是:dx可以多次出现,以及正确使用链式法则。我最大的问题是,把求导方法也写进了power类里,而没有采用类似第二次上机的架构,即递归实现求导功能。类复杂度图也能反映出这个问题。

bug们

三次作业在强测和互测中均没有出现bug。

自己测出来/跑评测机发现的bug如下:

  • hw1:因为没有仔细分析形式化表述,未考虑形如x^{+1}的情况。

  • hw2:在输出exp时是否要格外加括号的判定问题。

  • hw3:一开始没有注意到,dx可以多次出现。

互测:

  • hw1:同房的一位同学在处理输出结果时的bug,如果末位项为1,会无法输出1。

  • hw2与hw3:没有hack到。

不存在的优化

hw1:需要优化的部分是,尽量不让首项为负。如x-1优于-1+x。

hw2:比较容易想到和实现的是,输出exp时判断是否需要格外加括号。比较复杂的是指数函数的优化。看了评论区的优化方法,但因为能力有限,且考虑到优化后可能的bug,选择正确性优先。这也导致后两次作业性能分惨淡。

hw3:未考虑。

总结

第一单元有惊无险结束,非常感谢助教、开发评测机的同学、以及hw2与我交流相同测试点问题的同学们。希望我在下一单元的多线程学习中有更多收获。

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

301

社区成员

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

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