我一直想知道以编程方式存储数学表达式的最佳方法,包括具有非正常操作的表达式,例如无限和/产品,集合运算,向量/矩阵运算,积分/导数等。
我知道使用基本表达式的树结构,但是它仍然适用于此处吗?使用字符串(如LaTeX)可能不是评估的最佳选择,那么如何解决这个问题呢?
答案 0 :(得分:1)
树结构仍然适用,但是解析(表达式)树只是底层实体的工件,即用于处理表达式的无上下文语法。可以使用您最喜欢的遍历方法对解析树进行序列化和反序列化。
答案 1 :(得分:1)
树形结构很好。为每个节点允许两个以上的子节点可能更容易。
一个积分可能有三个节点:顶部和底部限制,以及被积函数。您可能有一种特殊类型的节点来指示无限限制。
您可能需要特殊类型的矩阵节点。虽然您可以将它们表示为列表列表,但使用2D节点阵列可能会更容易。对于更特殊类型的节点,存在一定的折衷,您可以使用更复杂的代码。
一些CAS系统(Maple)使用有向无环图,这允许更有效地表示公共子表达式。这有很大的复杂性。