多项式求导--三次作业小结

本文探讨了多项式计算的实现方式,从简单的HashMap结构到复杂的表达式树,介绍了三次作业的代码演变过程及数据分析。同时,分享了在调试过程中遇到的问题与解决方案,以及对设计模式的一些思考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多项式求导

对于多项式计算的认识

  • 总体认识
    多项式是天然的树形结构,理论上所有的多项式都可以用表达式树表示,而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. 从线性表到表达式树
      第三次作业,难度复杂度较前两次大了很多。
      表达式中嵌套表达式,之前采用的单分支单一结构的线形表,已经很难解决表达式嵌套表达式的递归结构。
      在离散数学、数据结构中,我们学习到“树是天然的递归结构”。
      而指导书中的描述,也很清楚的将表达式,描述为分支+层次的结构,因而表达式树是确定需要使用的。

    确定了这种数据结构,剩下的就是结构实现的问题了。
    通过学习花花大佬的代码,缓慢且艰难的写出这次表达式作业。(对于接口和继承的总结见之后博客)

三次作业代码分析

分析工具

  • IDEA 类图
  • DesigniteJava
    相关标准:
    • 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)

第一次作业

  • 代码架构--类图分析

    homework1_UML

  • 数据分析

h1_method

h1_type

第二次作业

  • 代码架构--类图分析

    homework2_UML

  • 数据分析

    h2_method

    h2_type

第三次作业

  • 代码架构--类图分析

    homework3_overview

    homework3_binop

    homework3_factor

  • 数据分析

    h3_method

    h3_type

三次作业总分析

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

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

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

发现bug与debug

  • 自我测试
    在读题时,构造出一系列覆盖性小型测试集
    借助于shell和python,写出了自动的黑盒测试,也就是随机性大面积测试集

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

关于设计模式的思考

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

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

转载于:https://www.cnblogs.com/yzy11235/p/OO_Poly_Calculation.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值