可能重复:
Strategies for simplifying math expressions
我有一个数学表达式解析器,它构建一棵树来表示表达式。例如,我输入了2+y+3+y,它的内部表示形式是:

现在,作为人类,我们可以立即看到2+y+3+y = 2y + 5。对于我所看到的计算机来说,最棘手的部分是,如果我站在左边的+上,我就不知道我在另一个分支中又增加了一个右边的部分--这在评估时并不重要,但是在简化的时候,我看不出这是怎么做的。
这些类是这样组合在一起的:

我试过用谷歌搜索这个,但在这里找不到任何帮助我的东西。只是一些普通的路标,或者网址之类的,会很感激的。
编辑:注意到,在这个例子中,我只包含了加法。解析器支持如下的表达式: 1+2*(3^4-4/5*(1+2))
发布于 2012-05-09 20:34:20
由于可以用类结构表示的表达式集非常有限,因此您可以简单地计算每个变量发生的频率和所有常量的总和。
var nodes = tree.Flatten();
var variables = nodes
.OfType<Variable>()
.GroupBy(x => x.Name)
.Select(g => new Multiplication(
new Variable(g.Key), new Constant(g.Count())));
var constants = nodes
.OfType<Constant>()
.Sum(x => x.Value);
var result = new Addition(
variables.Aggregate((x, y) => new Addition(x, y)),
new Constant(constants));https://stackoverflow.com/questions/10523564
复制相似问题