多项式求导

目录

  • 多项式求导
  • 对于多项式计算的认识
  • 三次作业代码分析
  • 第一次作业
  • 第二次作业
  • 第三次作业
  • 三次作业总分析
  • 发现bug与debug
  • 关于设计模式的思考

对于多项式计算的认识

  • 总体认识
    多项式是天然的树形结构,理论上所有的多项式都可以用表达式树表示,而Java中的继承和接口方法可以很轻松的递归嵌套建立一棵表达式树。
  • 分阶段认识
  1. 从ArrayList到HashMap
    在第一二次作业中,多项式的形式相对简单
    由相加减的项和系数,和项中仅有简单幂次相乘,组合
    因而项和幂次为Key,系数为Value的HashMap是组织这种数据最好的数据结构。

而在这次数据结构的转变中,初次接触到了extend override等概念,了解到自定义类的方法,也学习了部分HashMap库。
学习资料记录如下浅谈Java中的hashcode方法

//Key
    private BigInteger xbasePower = BigInteger.ZERO;
    private BigInteger sinPower = BigInteger.ZERO;
    private BigInteger cosPower = BigInteger.ZERO;
  1. 从线性表到表达式树
    第三次作业,难度复杂度较前两次大了很多。
    表达式中嵌套表达式,之前采用的单分支单一结构的线形表,已经很难解决表达式嵌套表达式的递归结构。
    在离散数学、数据结构中,我们学习到“树是天然的递归结构”。
    而指导书中的描述,也很清楚的将表达式,描述为分支+层次的结构,因而表达式树是确定需要使用的。
确定了这种数据结构,剩下的就是结构实现的问题了。
通过学习花花大佬的代码,缓慢且艰难的写出这次表达式作业。(对于接口和继承的总结见之后博客)

三次作业代码分析

分析工具

  • LOC (Lines Of Code – at method and class granularity)
  • CC (Cyclomatic Complexity – Method)
  • PC (Parameter Count – Method)
  • NOF (Number of Fields – Class)
  • NOPF (Number of Public Fields – Class)
  • NOM (Number of Methods – Class)
  • NOPM (Number of Public Methods – Class)
  • WMC (Weighted Methods per Class – Class)
  • NC (Number of Children – Class)
  • DIT (Depth of Inheritance Tree – Class)
  • LCOM (Lack of Cohesion in Methods – Class)
  • FANIN (Fan-in – Class)
  • FANOUT (Fan-out – Class)

第一次作业

  • 代码架构--类图分析
  • 数据分析

java 计算多项式 java多项式求导_java 计算多项式

java 计算多项式 java多项式求导_HashMap_02

第二次作业

  • 代码架构--类图分析
  • 数据分析

java 计算多项式 java多项式求导_表达式树_03

第三次作业

  • 代码架构--类图分析

java 计算多项式 java多项式求导_HashMap_04

java 计算多项式 java多项式求导_java 计算多项式_05

  • 数据分析

java 计算多项式 java多项式求导_设计模式_06

三次作业总分析

当我们对基本机制还一无所知的情况下,我们就必须退而求助于统计学。

从类图的复杂度可以看到,三次作业的难度是逐级增长的。

但是从几次数据分析来看,对面向对象的认识也越来越深入。

发现bug与debug

  • 自我测试
    在读题时,构造出一系列覆盖性小型测试集
    借助于shell和python,写出了自动的黑盒测试,也就是随机性大面积测试集
  • 互测
  • 第一次互测 认真的阅读了对方的代码并学习,发现bug主要集中在正则表达式和输出部分
  • 之后两次互测 由于冯如杯等项目原因,没有认真互测,在之后的学习改进
  • Bug修复
    Bug主要有两个来源,WRONG FORMAT和优化性能导致问题。
  • WRONG FORMAT! 对于format问题,思考不充分,而且也不够重视,但是在听了荣老师对WRONG FORMAT造成的航天史上的几次危机之后,在之后的编程中会格外注意,并且加强测试。
  • 优化问题,优化之后测试不充分。

关于设计模式的思考

三次作业写完之后,算是把Java语法过了一遍。

看了Neo学长的设计模式全解析 发现可以用工厂思想来生成表达式的各个因子,这一思想期待在之后的作业中学习强化。