基于圖結構的計算分析和實現

這兩天調研了下基于圖結構的計算方式,并以圖結構的方式實現了簡單的算式計算,具體過程如下文。

圖結構構成

  1. 使用簡單的將所有節點通過數組或鏈表進行管理起來
  2. 使用二維數組將節點之間的關系進行管理。
  3. 簡單實現 BFS及DFS
  4. 通過查找依賴關系來構成執行順序圖
    如下圖:
數據存儲表

其數據結構圖如下圖:

圖結構

因此對于簡單圖結構來說,通過與節點等數量維度的二維數組能完整的描述圖結構的所有關系。

執行圖過程

對于計算使用的算式來說,算式中的加減優先級很重要,因此需要通過對優先級進行圖的優化,如下為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)));
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1 序 2016年6月25日夜,帝都,天下著大雨,拖著行李箱和同學在校門口照了最后一張合照,搬離寢室打車去了提前租...
    RichardJieChen閱讀 5,152評論 0 12
  • 樹的概述 樹是一種非常常用的數據結構,樹與前面介紹的線性表,棧,隊列等線性結構不同,樹是一種非線性結構 1.樹的定...
    Jack921閱讀 4,489評論 1 31
  • 借春假之便,遂以“看完同學”為名義重新穿上久違的校服踏上已走過三年的那條小路,出現在校園門口。青灰色的磚墻與...
    序章閱讀 439評論 2 0
  • 每天我們會碰到多少人呢?有幾個人會與我們擦肩卻變成身邊彼此的背景?有幾個人會因零星話語入耳,卻轉眼就忘記?有幾個人...
    偶然之音閱讀 299評論 0 0