6-12图-有向无环图(DAG图)

有向无环图(DAG图)

一.基础知识
有向无环图:有向图+无环
简称:Directed Acyclic Graph(DAG图)
directed 径直的 [dəˈrektɪd]
acyclic 无环的 [ˌeɪˈsaɪklɪk]
graph 图 [ɡræf]
在这里插入图片描述
二.化简

找到重复部分
在这里插入图片描述
修改
在这里插入图片描述
再找
在这里插入图片描述
再改
在这里插入图片描述
再找
在这里插入图片描述
再改
在这里插入图片描述
完成

三.构建

为防止化简遗漏,通常需要自己构建
((a+b)* b*(c+d))+(c+d)* e)*((c+d)*e)

1.构建底层
在这里插入图片描述
2.按照运算符计算顺序依次构建
题目:{ (a+b)* [b*(c+d)] + (c+d)* e} * [(c+d)*e]

a+b
c+d
在这里插入图片描述
[b*(c+d)] 注意分层
在这里插入图片描述
题目:{ (a+b)* [b*(c+d)] + (c+d)* e} * [(c+d)*e]

(a+b)* [b*(c+d)]
在这里插入图片描述
题目:{ (a+b)* [b*(c+d)] + (c+d)* e} * [(c+d)*e]

(c+d)* e
在这里插入图片描述
题目:{ (a+b)* [b*(c+d)] + (c+d)* e} * [(c+d)*e]

{ (a+b)* [b*(c+d)] + (c+d)* e}
在这里插入图片描述
题目:{ (a+b)* [b*(c+d)] + (c+d)* e} * [(c+d)*e]

(c+d)* e 已算过
{ (a+b)* [b*(c+d)] + (c+d)* e} * [(c+d)*e]
在这里插入图片描述
通常正确构建,检查时无需修改,本题即是

3.检查。自底向上依次检查同层是否出现重复,若有修改

举例:
绿色部分,都是c+d去乘某个数
在这里插入图片描述
修改为
在这里插入图片描述
再如:
出现两个(c+d) * e
在这里插入图片描述
修改为:
在这里插入图片描述
四.进阶

( a * b ) * ( a * b ) * ( a * b ) * c

分步构建
在这里插入图片描述
检查删掉重复部分:同层3个a*b,保留一个(此处保留了中间的)
在这里插入图片描述
即:(通过练习可一步到位)
在这里插入图片描述
注:( a * b ) * ( a * b ) * ( a * b ) * c
刚刚我们是按照从左到后的顺序构建的,如果改变构建顺序,如:先计算 ( a * b ) * c会导致图不一样,因此考试中可能不会对此过深考察

五.练习
在这里插入图片描述
解:
在这里插入图片描述
答案:A

提醒:不要忘了x也可以合并,我们在构建过程中底层的每个顶点是只出现一次的
在这里插入图片描述

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是使用JavaScript和SVG实现Web前端WorkFlow工作流DAG有向无环图的步骤: 1. 首先,需要定义一个包含节点和边的数据结构,可以使用邻接表或邻接矩阵来表示。 2. 接下来,需要使用SVG来绘制节点和边。可以使用SVG的circle元素来绘制节点,使用line元素来绘制边。 3. 在绘制节点和边之前,需要计算每个节点的位置。可以使用拓扑排序算法来计算节点的位置,确保没有环。 4. 绘制节点和边时,可以使用鼠标事件来实现节点的拖拽和边的连线。 5. 最后,可以添加一些交互式功能,例如缩放和平移。 以下是一个简单的JavaScript和SVG实现Web前端WorkFlow工作流DAG有向无环图的示例代码: ```javascript // 定义节点和边的数据结构 var nodes = [ { id: 1, name: 'Node 1', x: 100, y: 100 }, { id: 2, name: 'Node 2', x: 200, y: 200 }, { id: 3, name: 'Node 3', x: 300, y: 100 } ]; var edges = [ { source: 1, target: 2 }, { source: 2, target: 3 } ]; // 计算节点的位置 var layout = dagre.layout() .nodeSep(50) .rankSep(50) .run({ nodes: nodes, edges: edges }); // 绘制节点和边 var svg = d3.select('svg'); var g = svg.append('g'); var node = g.selectAll('.node') .data(nodes) .enter() .append('g') .attr('class', 'node') .attr('transform', function(d) { return 'translate(' + d.x + ',' + d.y + ')'; }); node.append('circle') .attr('r', 20) .style('fill', 'white') .style('stroke', 'black') .style('stroke-width', '2px'); node.append('text') .attr('dy', '.35em') .text(function(d) { return d.name; }); var edge = g.selectAll('.edge') .data(edges) .enter() .append('line') .attr('class', 'edge') .attr('x1', function(d) { return layout.nodes[d.source].x; }) .attr('y1', function(d) { return layout.nodes[d.source].y; }) .attr('x2', function(d) { return layout.nodes[d.target].x; }) .attr('y2', function(d) { return layout.nodes[d.target].y; }) .style('stroke', 'black') .style('stroke-width', '2px'); // 添加交互式功能 var zoom = d3.zoom() .on('zoom', function() { g.attr('transform', d3.event.transform); }); svg.call(zoom); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡__卡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值