我面临一个小问题,解析和比较数学公式。
假设我们有以下三个公式:
2*a+b*cj*i+e+ex+(y*z)+x我们同意,这三个公式是相等的。我们如何比较不同的公式,并知道它们是否相等?您知道允许您重写和简化这些公式以便进行比较的java API吗?
发布于 2017-12-28 11:33:58
这个任务并不简单,需要了解解析树。tree
其主要思想是构建表达式的解析树并将其规范化,将节点排列成“相等”表达式的顺序。
例如,第一个表达式将解析为两个产品(*)的和(+),其中一个涉及常量和一个变量,另一个涉及其他两个变量。
树的前缀遍历将是
+ * 2 a * b c如果采用常量先于变量的约定,如果重命名变量,
+ * 2 V0 * V1 V2将表示所有表达式,如a*2+d*f、f*a+2*b.但不是2*a+a*c,它有一个重复的变量,应该是+ * 2 V0 * V0 V1。
通过像术语一样的重组(e+e变成2*e),事情变得更加困难。这可能可以通过预处理解析树和发现相同的子树来实现。在给定的情况下
+ V2 V2拐杖被看作是两个相等公式的和,并被转化为
* 2 V2在进一步处理之前。
我不确定一般情况是否会这么容易。
https://stackoverflow.com/questions/48006424
复制相似问题