2014-04-02 81 views
2

我一直想知道以編程方式存儲數學表達式的最佳方式,包括具有非正常運算的表達式,例如無限和/產品,集合運算,向量/矩陣運算,積分/導數等。存儲複雜的數學表達式

我知道使用基本表達式的樹結構,但它仍然適用於此?使用字符串(如LaTeX)可能不是評估的最佳選擇,那麼如何解決此問題?

+0

二叉樹是把它們留在記憶中的最好方式,你可以快速地走樹。存儲樹,我只是序列化,然後存儲XML。 –

回答

1

樹狀結構很好。每個節點允許兩個以上的孩子比較容易。

積分可能有三個節點:上下限和積分。您可能有特殊類型的節點來指示無限的限制。

您可能需要特殊類型的矩陣節點。雖然您可以將它們表示爲列表列表,但使用二維數組節點可能更容易。對於更特殊類型的節點有一定的權衡,則代碼更復雜。

一些CAS系統(Maple)使用有向無環圖,這允許通用子表達式更有效地表示。這種複雜性大大增加。

1

樹結構仍然適用,但解析(表達式)樹只是底層實體的工件,即設計用於處理表達式的上下文無關語法。解析樹可以使用您最喜歡的遍歷方法進行序列化和反序列化。