我正在面临一个小问题解析和比较数学公式。
假设我们有以下3个公式:
-
2*a+b*c
-
j*i+e+e
-
x+(y*z)+x
我们同意,3个公式相等。我们如何比较不同的公式并知道它们是否相等?您是否知道允许您重写并简化这些公式以比较它们的Java API?
此任务不是微不足道的,需要对解析树的理解。https://en.wikipedia.org/wiki/parse_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
在进一步处理之前。
我不确定一般情况是否那么容易。