使用变量的Shunting Yard算法

4

我目前正在修改Shunting Yard算法的版本,使其能够处理变量,但我无法想出如何让它工作。例如,我希望该算法将2 * (2x + 5) - 5重写为4x + 5。有任何想法/已经实现此功能的算法链接吗?


如果你不想使用二叉树,那就太复杂了。 - gab06
如果我使用二叉树,那么如何实现解决方案? - Alston Lin
1个回答

4
  1. 将表达式:2 * (2x + 5) - 5
  2. 加上*符号,让计算机更易理解:2 * (2*x + 5) - 5
  3. 使用Shunting Yard算法进行解析,变为:2 2 x * 5 + * 5 -(每个字符都可以看作数组的一个元素)。
  4. 利用解析后的表达式创建二叉树:

- / \ * 5 / \ 2 + / \ * 5 / \ 2 x 5. 对树定义并应用代数规则。例如,一条规则能够将2节点与2*x+5子树相“乘”。


如有需要,随时问我更多的问题 :) - gab06
谢谢,我明白你的意思。这种方法对函数也适用吗? - Alston Lin
你所说的函数是指三角函数吗?我正在开发一款在线CAS,采用这种方法,目前它可以解决代数方程、极限、导数和一些积分。 - gab06
像三角函数、对数、自然对数等函数。 - Alston Lin
是的,使用这个模型你可以涵盖所有这些。三角函数、对数、自然对数等只有一个子节点(参数)。 - gab06
1
@gab06 谢谢。 ;) - 不想在另一个问题中显得太啰嗦。 - Funk Forty Niner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接