有向图的环和有向无环图

2018 年 7 月 24 日 大数据和云计算技术

   本篇主要分享关于有向图的环和有向无环图(DAG,估计做大数据的同学到处都可以看到),所以相关概念我就不做详细介绍了。

 

  用有向图中各个节点代表着一个又一个的任务,而其中的方向代表的任务的执行顺序。而方向代表着这个在执行这个任务之前必须完成其他节点,例如上图中在5执行必须执行3和0 节点。


   所以可以想到有向图中有向环的检测非常重要,例如上面 要是5之前 3要执行,3之前4要执行,4之前5要执行,那么着三个限制条件永远事不可能被执行的,要是一个优先级限制的问题中存在有向环,那么这个问题肯定是无解的。


   有向环的检测的理念是我们找到了一条边v-》w  要是w已经存在在栈中,就找到了一个环,因为栈中表示的是一条有w-》v的路径,而v-》w正好补全了这个环。也就是存在有向环。所以这个优先任务是有问题的。

public class DirectedCycle {
private boolean[] marked;
  private int[] edgeTo;
  private Stack<Integer> cycle;
  private boolean[] onStack;

  public DirectedCycle(Digraph G) {
onStack = new boolean[G.V()];
     edgeTo = new int[G.V()];
     marked = new boolean[G.V()];
     for (int v = 0; v < G.V(); v++) {
if (!marked[v]) {
dfs(G, v);
        }
}
}

private void dfs(Digraph G, int v) {
onStack[v] = true;
     marked[v] = true;
     for (int w : G.adj(v)) {
if (this.hasCycle()) {
return;
        } else if (!marked[w]) {
edgeTo[w] = v;
           dfs(G, w);
        } else if (onStack[w]) {
cycle = new Stack<Integer>();
           for (int x = v; x != w; x = edgeTo[x]) {
cycle.push(x);
           }

cycle.push(w);
           cycle.push(v);
        }
}
onStack[v] = false;
  }

public boolean hasCycle() {
return cycle != null;
  }

public Iterable<Integer> cycle() {
return cycle;
  }
}


猜你喜欢




#大数据和云计算机技术社区#博客精选(2017)

NoSQL 还是 SQL ?这一篇讲清楚

阿里的OceanBase解密

#大数据和云计算技术#: "四有"社区介绍

大数据和云计算技术周报(第56期)

新数仓系列:Hbase周边生态梳理(1)

《大数据架构详解》第2次修订说明

简单梳理跨数据中心数据库

云观察系列:漫谈运营商公有云发展史

云观察系列:百度云的一波三折

云观察系列:阿里云战略观察

超融合方案分析系列(7)思科超融合方案分析

加入技术讨论群




《大数据和云计算技术》社区群人数已经3000+,欢迎大家加下面助手微信,拉大家进群,自由交流。


喜欢QQ群的,可以扫描下面二维码:

欢迎大家通过二维码打赏支持技术社区(英雄请留名,社区感谢您,打赏次数超过108+):


登录查看更多
0

相关内容

有向图模型又称为贝叶斯网络,属于概率图模型中的一类。
【新书册】贝叶斯神经网络,41页pdf
专知会员服务
174+阅读 · 2020年6月3日
【SIGMOD2020-腾讯】Web规模本体可扩展构建
专知会员服务
29+阅读 · 2020年4月12日
【干货书】数值计算C编程,319页pdf,Numerical C
专知会员服务
66+阅读 · 2020年4月7日
【图神经网络(GNN)结构化数据分析】
专知会员服务
114+阅读 · 2020年3月22日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
94+阅读 · 2019年12月4日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
83+阅读 · 2019年11月25日
职人沙龙 | 走进小打卡,小程序技术实战交流
Linux挖矿病毒的清除与分析
FreeBuf
14+阅读 · 2019年4月15日
详解Transition-based Dependency parser基于转移的依存句法解析器
黑龙江大学自然语言处理实验室
9+阅读 · 2019年3月18日
一文带你读懂 SegNet(语义分割)
AI研习社
19+阅读 · 2019年3月9日
Gartner:2019 年 MSP 魔力象限
云头条
15+阅读 · 2019年3月6日
Gartner「首份」云管理平台(CMP)魔力象限
云头条
7+阅读 · 2019年1月14日
《大数据架构详解:从数据获取到深度学习》第⑨次重印
大数据和云计算技术
3+阅读 · 2018年3月3日
《大数据架构详解:从数据获取到深度学习》第八次重印
大数据和云计算技术
5+阅读 · 2017年12月24日
Bidirectional Attention for SQL Generation
Arxiv
4+阅读 · 2018年6月21日
Arxiv
3+阅读 · 2017年11月21日
VIP会员
相关资讯
职人沙龙 | 走进小打卡,小程序技术实战交流
Linux挖矿病毒的清除与分析
FreeBuf
14+阅读 · 2019年4月15日
详解Transition-based Dependency parser基于转移的依存句法解析器
黑龙江大学自然语言处理实验室
9+阅读 · 2019年3月18日
一文带你读懂 SegNet(语义分割)
AI研习社
19+阅读 · 2019年3月9日
Gartner:2019 年 MSP 魔力象限
云头条
15+阅读 · 2019年3月6日
Gartner「首份」云管理平台(CMP)魔力象限
云头条
7+阅读 · 2019年1月14日
《大数据架构详解:从数据获取到深度学习》第⑨次重印
大数据和云计算技术
3+阅读 · 2018年3月3日
《大数据架构详解:从数据获取到深度学习》第八次重印
大数据和云计算技术
5+阅读 · 2017年12月24日
Top
微信扫码咨询专知VIP会员