算法 - 求解一个变量的线性方程

时间:2012-12-02 17:30:12

标签: string algorithm equation-solving

给出一个字符串形式的表达式,求解x。表达式中x的最高幂将等于1.允许的运算符为+,*和 - 。这些都是二元运算符。因此,2x将被写为2 * x。每个操作员后面都会跟一个单词或一个常数。

例如,请考虑以下等式:

2 * X + 5-(4 * X-7 +(4-2))= 10 * X-9

这是一个非常有效的等式。形式1 * 2 * 3的表达式无效,但1 *(2 * 3)有效。

考虑到这样的等式,我们需要找到x的解。如果等式无效,程序应显示错误消息。

有人可以解释如何解决这个问题吗?我现在唯一想到的就是使用Context Free Grammars进行词法分析和解析。但我觉得有一个比这更简单的解决方案。有人能说些什么吗?

1 个答案:

答案 0 :(得分:4)

(1)将e1 = e2转换为e = 0,其中e = e1 - e2

(2)将e转换为ax + b,对于某些ab

(3)解决,x = -b/a

步骤(2)可以递归处理,如下所示:

F(k)     = 0x + k    // For any constant k.
F(x)     = 1x + 0
F(p + q) = let a_1x + b_1 = F(p)
           and a_2x + b_2 = F(q) 
           in  (a_1 + a_2)x + (b_1 + b_2)
    // Similarly for subtraction.
F(p * q) = let a_1x + b_1 = F(p)
           and a_2x + b_2 = F(q) // At least one of a_1 and a_2 must be zero.
           in  (a_1*b_2 + a_2*b_1)x + (b_1*b_2)