我一直想知道以編程方式存儲數學表達式的最佳方式,包括具有非正常運算的表達式,例如無限和/產品,集合運算,向量/矩陣運算,積分/導數等。存儲複雜的數學表達式
我知道使用基本表達式的樹結構,但它仍然適用於此?使用字符串(如LaTeX)可能不是評估的最佳選擇,那麼如何解決此問題?
我一直想知道以編程方式存儲數學表達式的最佳方式,包括具有非正常運算的表達式,例如無限和/產品,集合運算,向量/矩陣運算,積分/導數等。存儲複雜的數學表達式
我知道使用基本表達式的樹結構,但它仍然適用於此?使用字符串(如LaTeX)可能不是評估的最佳選擇,那麼如何解決此問題?
樹狀結構很好。每個節點允許兩個以上的孩子比較容易。
積分可能有三個節點:上下限和積分。您可能有特殊類型的節點來指示無限的限制。
您可能需要特殊類型的矩陣節點。雖然您可以將它們表示爲列表列表,但使用二維數組節點可能更容易。對於更特殊類型的節點有一定的權衡,則代碼更復雜。
一些CAS系統(Maple)使用有向無環圖,這允許通用子表達式更有效地表示。這種複雜性大大增加。
樹結構仍然適用,但解析(表達式)樹只是底層實體的工件,即設計用於處理表達式的上下文無關語法。解析樹可以使用您最喜歡的遍歷方法進行序列化和反序列化。
二叉樹是把它們留在記憶中的最好方式,你可以快速地走樹。存儲樹,我只是序列化,然後存儲XML。 –