首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简化代数表达式

简化代数表达式
EN

Stack Overflow用户
提问于 2012-05-09 20:23:28
回答 1查看 2.5K关注 0票数 8

可能重复:

Strategies for simplifying math expressions

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

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

这些类是这样组合在一起的:

我试过用谷歌搜索这个,但在这里找不到任何帮助我的东西。只是一些普通的路标,或者网址之类的,会很感激的。

编辑:注意到,在这个例子中,我只包含了加法。解析器支持如下的表达式: 1+2*(3^4-4/5*(1+2))

EN

回答 1

Stack Overflow用户

发布于 2012-05-09 20:34:20

由于可以用类结构表示的表达式集非常有限,因此您可以简单地计算每个变量发生的频率和所有常量的总和。

代码语言:javascript
复制
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));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10523564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档