(Java)数据结构——图(第八节)有向无环图(DAG图)以及DAG描述表达式

前言

本博客是博主用于复习数据结构以及算法的博客,如果疏忽出现错误,还望各位指正。

有向无环图的概念

昨天复习了拓扑排序,打算写个博客,一翻数据结构的书到那,发现连着概念还有DAG图以及AOV网,于是看了看,这篇博客先来介绍有向无环图DAG。

下图一个无环的有向图乘坐有向无环图,也就是DAG图。

然后发现看书看不下去,有点复杂,这书上的表达式是怎么变过去的呢?又去看了看王道的视频,发现之前好像刷王道的视频没刷到过这个DAG描述表达式

我们学过数据结构的都知道,一个表达式可以用树来表示。

就比如说这个,然而我们观察右边那两堆子树,发现它们一模一样,于是我们就可以对它们进行一个“合并”操作。

“合并”之后,变成这样,然后虽然进行了一次合并,但是还存在着很多类似的冗余子树,比如圈出来的,再比如左边那个圈旁边的俩b,也是冗余的,再化简化简化简……就变成了书上最终的样子,amazing!

得到最终的DAG图,就是这样。

这好像也是一类题,正好可以水一篇博客。

DAG描述表达式

具体的解题步骤,就是先按照运算顺序对表达式进行分割,先后顺序有些许出入无伤大雅。就比如我写的是王道的化简步骤。

按照我自己的习惯来,就是先算最里面的括号,然后平级括号消消消。

最后应该也是可以建好的,所以先后顺序有点出入无所谓,重要的是做对题。

然后把每个结点写到最底下,这个表达式就出现过abcde,先写上。

然后按照刚才的顺序建好树,不过注意要分层!看图理解分层的意思吧,我也说不清……

然后就从最底下一层找,发现3个+指着C和D,直接合并

再看这一层没有了往上,右边那俩*,一个+,一个E,合并!(看左右是一样就合并)。

这就是最终的了,因为再往上一层,左边+右边*,再往右没了,再往上也是,这就是分层的好处。

这种方法,王道说,应该可以解决99%的,如果发现解决不了的,请去评论区留言。

好了,做道题,应该看得懂吧,选A,秒了。

上一篇:基于 Scriptable 从零开始美化iOS桌面(集合篇)-目录


下一篇:《猎灵online》游戏完整源码(源码+客户端+服务端+文档+工具),云盘下载