【问题标题】:comparison of mathematical formulas [closed]数学公式的比较[关闭]
【发布时间】:2017-12-28 11:12:46
【问题描述】:

我在解析和比较数学公式时遇到了一个小问题。

假设我们有以下 3 个公式:

  • 2*a+b*c
  • j*i+e+e
  • x+(y*z)+x

我们同意,这 3 个公式是相等的。 我们如何比较不同的公式并知道它们是否相等? 您知道 Java API 可以让您重写和简化这些公式以便比较它们吗?

【问题讨论】:

标签: algorithm math compare simplify java


【解决方案1】:

这项任务并不简单,需要了解解析树。 https://en.wikipedia.org/wiki/Parse_tree

主要思想是构建表达式的解析树并对其进行规范化,以与“相等”表达式相同的顺序排列节点。

例如,您的第一个表达式将解析为两个乘积 (*) 的和 (+),其中一个涉及一个常量和一个变量,另一个涉及两个其他变量。

树的前缀遍历将是

+ * 2 a * b c

如果您采用常量在变量之前的约定,并且如果您重命名变量,

+ * 2 V0 * V1 V2

将表示所有表达式,例如a*2+d*ff*a+2*b...但不是2*a+a*c,它有一个重复的变量,应该是+ * 2 V0 * V0 V1


通过重新组合类似的术语(e+e 变为 2*e),您让事情变得更加困难。这可能可以通过预处理解析树并发现相同的子树来实现。在给定的情况下

+ V2 V2

可以看作是两个相等公式的总和,可以转化为

* 2 V2

在进一步处理之前。


我不确定一般情况会那么容易。

【讨论】:

  • 如果我设法用相同的变量(V0、V1、V2...)形式化和重写相同的公式,我可以减去两个公式,如果它们相互抵消,这意味着它们是相等。
猜你喜欢
  • 2011-04-25
  • 2013-08-28
  • 2011-06-15
  • 1970-01-01
  • 2013-01-15
  • 2021-12-31
  • 1970-01-01
  • 2010-09-06
  • 2023-04-07
相关资源
最近更新 更多