Math 存储复杂的数学表达式

Math 存储复杂的数学表达式,math,language-agnostic,expression,Math,Language Agnostic,Expression,我一直想知道以编程方式存储数学表达式的最佳方法,包括具有非正规运算的表达式,如无限和/积、集合运算、向量/矩阵运算、积分/导数等 我知道对基本表达式使用树结构,但它在这里仍然适用吗?使用字符串(如LaTeX)可能不是最佳的求值方法,因此如何解决此问题?树结构仍然适用,但解析(表达式)树只是底层实体的构件,即设计用于处理表达式的上下文无关语法。可以使用您喜欢的遍历方法序列化和反序列化解析树。树结构很好。允许每个节点有两个以上的子节点可能更容易 积分可能有三个节点:上限和下限以及被积函数。您可能有一

我一直想知道以编程方式存储数学表达式的最佳方法,包括具有非正规运算的表达式,如无限和/积、集合运算、向量/矩阵运算、积分/导数等


我知道对基本表达式使用树结构,但它在这里仍然适用吗?使用字符串(如LaTeX)可能不是最佳的求值方法,因此如何解决此问题?

树结构仍然适用,但解析(表达式)树只是底层实体的构件,即设计用于处理表达式的上下文无关语法。可以使用您喜欢的遍历方法序列化和反序列化解析树。

树结构很好。允许每个节点有两个以上的子节点可能更容易

积分可能有三个节点:上限和下限以及被积函数。您可能有一种特殊类型的节点来表示无限的限制

您可能需要矩阵的特殊类型的节点。虽然可以将它们表示为列表列表,但使用2D节点数组可能更容易。代码越复杂,节点类型越特殊,需要进行某种权衡


一些CAS系统(Maple)使用有向无环图,这允许更有效地表示公共子表达式。这大大增加了复杂性。

二叉树是将它们保存在内存中的最佳方法,您可以快速遍历树。存储树时,我只需序列化并存储XML。