基于图结构的计算分析和实现

这两天调研了下基于图结构的计算方式,并以图结构的方式实现了简单的算式计算,具体过程如下文。

图结构构成

  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,257评论 0 12
  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 4,509评论 1 31
  • 借春假之便,遂以“看完同学”为名义重新穿上久违的校服踏上已走过三年的那条小路,出现在校园门口。青灰色的砖墙与...
    序章阅读 440评论 2 0
  • 每天我们会碰到多少人呢?有几个人会与我们擦肩却变成身边彼此的背景?有几个人会因零星话语入耳,却转眼就忘记?有几个人...
    偶然之音阅读 307评论 0 0