WEB开发网
开发学院软件开发C语言 简单DAG生成算法的一个性质 阅读

简单DAG生成算法的一个性质

 2009-06-03 08:30:24 来源:WEB开发网   
核心提示: 对应习题里c)的DAG应该是: 上面的代码做出来的效果还有待改善就是了,对 a + b + (b + a) 这样的表达式,简单DAG生成算法的一个性质(7),生成的DAG会是: 右侧中间的那个+下面的左节点与右节点的顺序反掉了,其实仔细留心的话,下面的lambda表达式: C#代码x =&

对应习题里c)的DAG应该是:

简单DAG生成算法的一个性质

上面的代码做出来的效果还有待改善就是了。对 a + b + (b + a) 这样的表达式,生成的DAG会是:

简单DAG生成算法的一个性质

右侧中间的那个+下面的左节点与右节点的顺序反掉了。其实仔细留心的话,前面对习题的b)给出的DAG也有一个节点的左右关系是反了的。

要调整这个细节挺麻烦的,我还没想好怎么实现比较干净。不过暂时就这么凑合看看好了 = =

顺带提一下.NET 3.5里的LINQ Expression Tree和DLR里的LINQ Expression Tree v2。

在LINQ与DLR的Expression tree(1):简介LINQ与Expression tree一帖的Expression tree与lambda表达式一节里,我简单的提到过“Expression Tree表示的是AST”这样的概念。当时只是为了说明方便,其实并不准确。

用那帖的例子来说,下面的lambda表达式:

C#代码

x => -x

在那帖里我给出了这样的AST图:

简单DAG生成算法的一个性质

也说明了图中虚线连接的两个节点实际上是一个节点。

但我们都知道,树这种数据结构的重要性质就是它的每个节点都只有一个父节点(根节点除外)。上述lambda表达式对应的Expression Tree中的节点情况实际上应该这样画:

上一页  2 3 4 5 6 7 8 9  下一页

Tags:简单 DAG 生成

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接