Eri*_*kTJ 8 c# math tree algebra
可能重复:
简化数学表达式的策略
我有一个数学表达式解析器,它构建一个树来表示表达式.比方说,例如,我输入2+y+3+y,其内部表示将是:

现在,作为人类,我们可以立即看到这一点2+y+3+y = 2y + 5.我看到计算机的棘手部分是,如果我站在左边+,我不知道在另一个分支中我还有另外一个权利 - 这在评估时无关紧要,但在简化时不明白这是如何做得很好的.
这是课程如何组合在一起:

我试图谷歌这个,但没有找到任何可以帮助我在这里.只是一些通用的航点,或者一个网址或者其他什么东西都会受到赞赏
编辑:请注意,对于示例我只包括添加.解析器支持以下表达式:1 + 2*(3 ^ 4-4/5*(1 + 2))
由于可以用类结构表示的表达式集非常有限,因此您可以简单地计算每个变量出现的频率并对所有常量求和。
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));
Run Code Online (Sandbox Code Playgroud)