[問題] 關於運算式的相等

作者: nevikw39 (牧)   2020-06-01 12:47:15
大家安安,o'_'o
最近我想要判斷兩(後序)運算式是否相等,例如中序式 A + (B+C)*D - E 的後序式可以是
BC+D* A + E - 或 A BC+D* E - +。
一開始的想法是構造 expression tree 然後看看經過旋轉後是否相等,但是我發現加法、乘法有交換律與
結合律,事情就變得好複雜。
比如把上面的例子簡化為中序式 X + Y - Z,後序式的寫法包括但或許不限於 X Y + Z - 及 X Y Z - + 等
等。寫成 expression tree 的話分別是:
-
/ \
+ Z
/ \
X Y
+
/ \
X -
/ \
Y Z
這樣似乎就沒辦法繼續惹
想請問各位大大能否給我一些方向,謝謝!!
作者: s89162504 (阿本)   2020-06-01 13:22:00
還有分配綠跟負號呢
作者: oToToT (屁孩)   2020-06-01 15:35:00
好奇隨機代值的話怎麼估計
作者: bibo9901 (function(){})()   2020-06-01 17:14:00
這應該是undecidable
作者: alan23273850   2020-06-01 19:38:00
我在stackoverflow查到你的發問哈哈我猜啦,你按照課堂上教的stack實作法,讓兩邊stack的理論值同步,到最後能一樣的話就是相等,不過這只是我的猜測,你要去證明我的方法正確或有反例阿不對,當我沒說,光這個例子我的方法就不行了
作者: vnon (路人)   2020-06-02 18:48:00
先轉換成Canonical Form再比較?這篇也許有幫助 https://reurl.cc/O1Dzz7
作者: stimim (qqaa)   2020-06-02 19:37:00
全部展開+比較係數大概可以,不過複雜度就...
作者: ddavid (謊言接線生)   2020-06-10 15:28:00
樓上那個裡面只有+,難度差距很大我在想有沒有可能算出其中一邊的變數次方數跟乘除關係後,能用多點例證法甚至大數值的單點例證法直接證明相等?

Links booklink

Contact Us: admin [ a t ] ucptt.com