我正面临解析和比较数学公式的小问题。
假设我们有以下3个公式:
2*a+b*c
j*i+e+e
x+(y*z)+x
我们同意,3个公式是相同的。 我们如何比较不同的公式并知道它们是否相等? 您是否了解允许您重写和简化这些公式以便比较它们的Java API?
答案 0 :(得分:1)
这项任务并不简单,需要了解解析树。 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
在进一步处理之前。
我不确定一般情况会如此简单。