這兩天調研了下基于圖結構的計算方式,并以圖結構的方式實現了簡單的算式計算,具體過程如下文。
圖結構構成
- 使用簡單的將所有節點通過數組或鏈表進行管理起來
- 使用二維數組將節點之間的關系進行管理。
- 簡單實現 BFS及DFS
- 通過查找依賴關系來構成執行順序圖
如下圖:
數據存儲表
其數據結構圖如下圖:
圖結構
因此對于簡單圖結構來說,通過與節點等數量維度的二維數組能完整的描述圖結構的所有關系。
執行圖過程
對于計算使用的算式來說,算式中的加減優先級很重要,因此需要通過對優先級進行圖的優化,如下為a + b * c 算式的優化過程圖:
a + b * c 圖優化過程
本文僅對圖進行簡單介紹及實現,詳細請參見代碼
上述的基本實現參考 Tanuki(貍)
如下是簡單實現的樣例代碼:
GraphEngine engine = new GraphEngine();
engine.appendField("a", AnyObject.valueOf(2));
engine.appendField("b", AnyObject.valueOf(3));
engine.appendField("c", AnyObject.valueOf(4));
engine.appendField("d", AnyObject.valueOf(5));
engine.dumpFieldList();
String func = "a + b";
System.out.println(String.format("%s = %s", func, engine.exec(func)));
func = "a + b * c";
System.out.println(String.format("%s = %s", func, engine.exec(func)));
func = "( a + b ) * c";
System.out.println(String.format("%s = %s", func, engine.exec(func)));
func = "( ( a + b ) * c ) * d";
System.out.println(String.format("%s = %s", func, engine.exec(func)));