首页 > 解决方案 > 在javascript中检查两个代数表达式是否相等的函数

问题描述

var Answer = '2a + 5b' // downloaded from database
var input = '5*b+ 2*a' // user input after calculating some algebraic expression. 

if (Answer == input){
    // tell student he solved the math problem correctly. 
}

我想要一个函数,以便上述 if 语句返回 true。我的问题是我的答案和用户输入是一个字符串,并且在比较时它们不相等。然而,用户已经正确解决了最初的问题。

标签: javascriptalgebra

解决方案


尽管代数表达式的某些形式——例如低次多项式——显然很容易检验是否相等或等价,但一般且完整的方法(以及算法)不可能存在,因为存在代数表达式的形式问题(决定它们的相等性)是不可判定的,正如理查森定理所证明的那样:

理查森定理对算法可以决定某些数学表达式是否相等的程度建立了限制。它指出,对于某一类相当自然的表达式,特定表达式 E 是否满足方程 E = 0 是不可判定的,同样不可判定由表达式 E 和 F 定义的函数是否处处相等(事实上,如果 E = F,如果且仅当 E - F = 0)。1968 年,巴斯大学的计算机科学家丹尼尔理查森证明了这一点。


推荐阅读