【问题标题】:Function that check if two algebraic expressions are equal in javascript在javascript中检查两个代数表达式是否相等的函数
【发布时间】:2020-03-26 21:14:15
【问题描述】:
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。我的问题是我的答案和用户输入是一个字符串,并且在比较时它们不相等。然而,用户已经正确解决了最初的问题。

【问题讨论】:

  • 你需要一些复杂的代码来评估数学表达式——祝你好运
  • 查看反向波兰符号和调车码算法。您必须实际解析答案和输入,然后折叠它们。这不是微不足道的。
  • 你能告诉我们更多关于你正在处理的问题类型吗?如果它们都符合这种格式,那么你就可以逃脱欺骗(例如,不实际解析,只使用 RegEx 或类似的东西来检查它们是否包含相同的功能部分)。但这将是模式匹配,如果您遇到任何更难的问题,它就会中断。 我不知道我们是否可以回答这个问题,除非您编辑您的问题并给我们更多答案/输入组合。 另外,边缘情况是什么? a*aa^2 都应该是有效答案吗? (5*b) + 2*a 怎么样?等

标签: javascript algebra


【解决方案1】:

尽管代数表达式的某些形式——例如低次多项式——显然很容易测试是否相等或等价,但不存在通用且完整的方法(因此也存在算法),因为存在代数表达式的形式Richardson's theorem 证明了这个问题(决定它们的相等性)是不可判定的:

Richardson 定理建立了一个限制 算法可以决定某些数学表达式是否 平等的。它指出,对于某个相当自然的类别 表达式,无法确定一个特定的表达式 E 满足方程 E = 0,同样无法确定是否 由表达式 E 和 F 定义的函数处处相等(在 事实上,E = F 当且仅当 E - F = 0)。 1968 年证明 巴斯大学的计算机科学家 Daniel Richardson。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-02
    • 2015-08-24
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    相关资源
    最近更新 更多