349
社区成员
作业要求:
第一次作业要求
首次的程序的主要开发任务是将含有括号的多变量多项式进行表达式解析与化简。
第二次作业要求
在第一次作业的基础之上,对程序增加自定义函数以及三角函数因子解析要求。
第三次作业要求
提出对求导因子的解析要求。
程序设计:
使用Java编写程序,用于简化带括号表达式的多项式函数。设计接受多项式函数作为输入,通过解决括号以及简化多项式项,并输出一个简化版本的函数。
设计输入格式包含使用运算符(、+、-、*、)以及字母变量的表达式。使用正则表达式从输入函数中提取多项式表达式。
第一步通过使用基于堆栈的方法来解决多项式函数中的括号。从左到右解析输入的字符串,将打开的括号推入堆栈,并在遇到闭合括号时弹出。在提取括号内的表达式后,使用递归的方式进行数据处理。将简化的形式替换括号内的表达式并重复过程直至表达式内不存有括号。
通过循环遍历多项式中的每个项,并组合具有相同变量的相同幂次的项,简化多项式项。组合常数项并输出简化后的多项式。
程序结构包含一个单一的类PolynomialSimplifier,其中包含所有所需的简化方法。使用helper方法,例如parseTerm、evaluateTrigExpression和combineTerms等来简化多项式函数。提高代码可读性的同时可以并使程序更加模块化。
在第二次作业中,增加了简化三角函数表达式的功能。通过使用正则表达式匹配sin、cos和tan函数及其参数,使用Math库函数评估三角函数表达式并用其简化形式替换。
程序优化:
程序的继承性以及多态性较低,但封装性良好。对于程序的优化,可以通过以下几种方式。一种方式是通过使用更高效的算法来解决括号的问题。当前的算法使用基于堆栈的方式,对于长输入字符串可能会导致高内存使用。另一种方法是使用递归函数,该函数使用调用栈存储打开括号的索引,并在遇到相应的闭合括号时解决括号。通过预编译程序中使用的正则表达式从而提高性能来进行程序优化。正则表达式计算成本高,预编译可以显着减少匹配输入字符串中的模式所需的时间。
当前的程序在需要处理更复杂的数学函数时,需要进行更改和扩展。例如,需要简化指数函数、对数函数或其他特殊函数时,会需要添加额外的方法和功能。但当前的程序,可读性强且易于维护和扩展。
OO度量:
继承性、多态性以及抽象性并未使用。
封装性:程序中的变量和方法都有被声明为private或者局部变量,因此封装性评估得分为较高。
耦合性:代码中有使用Java标准库中的Scanner、Pattern、Matcher等类,以及一些Java基础类库中的类,因此耦合性评估得分较高。
内聚性:本程序中simplifyFunction方法主要用于对输入的多项式进行化简,因此内聚性评估得分较高。
方法 |
时间复杂度 |
空间复杂度 |
main() |
O(N) |
O(1) |
simplifyFunction() |
O(N^2) |
O(N) |
evaluateTrigExpression() |
O(1) |
O(1) |
心得体会:
通过对第一单元的学习,对于结构设计以及合理运用模块化思维进行框架搭建等有了更深一步的理解。在测试程序时,对于不同输入,例如: ** 等,初步了解到一个完成的程序除了程序本身外,程序对测试环境的适配性也相当重要。同时,在构建函数的过程中,也深刻的体会到自身对于部分算法以及程序编写的了解程序以及相关技能有所欠缺。需要进行不断的学习与巩固提高。