- 浏览: 1398069 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (346)
- linux (10)
- hbase (50)
- hadoop (23)
- java (52)
- java multi-thread (13)
- Oracle小记 (41)
- 机器学习 (12)
- 数据结构 (10)
- hadoop hive (16)
- java io (4)
- jms (1)
- web css (1)
- kafka (19)
- xml (2)
- j2ee (1)
- spring (6)
- ibatis (2)
- mysql (3)
- ext (3)
- lucene (3)
- hadoop pig (3)
- java nio (3)
- twemproxy (1)
- antlr (2)
- maven (6)
- mina (1)
- 列数据库 (1)
- oozie (2)
- mongodb (0)
- 报错 (0)
- jetty (1)
- neo4j (1)
- zookeeper (2)
- 数据挖掘 (3)
- jvm (1)
- 数据仓库 (4)
- shell (3)
- mahout (1)
- python (9)
- yarn (3)
- storm (6)
- scala (2)
- spark (5)
- tachyon (1)
最新评论
-
guokaiwhu:
赞啊!今晚遇到相同的问题,正追根溯源,就找到了博主!
hbase 报错gc wal.FSHLog: Error while AsyncSyncer sync, request close of hlog YouAr -
喁喁不止:
很清楚,有帮助。
hive常用函数 -
dsxwjhf:
Good job !!
kafka获得最新partition offset -
Locker.Xai:
参考了
freemaker教程 -
maoweiwer:
为啥EPHEMERAL_SEQUENTIAL类型的节点并没有自 ...
zookeeper 入门讲解实例 转
有向图的拓扑排序,能够获得访问到某一节点的提前条件。
拓扑排序时不可以实现环和图的拓扑排序。
写一下拓扑排序的实现:
是在联通矩阵上实现的,拓扑排序的算法是:
1.查看连通矩阵是否还有剩余节点,如果有继续2,3操作,如果没有结束拓扑排序
2.找到没有后继的节点
3.如果找到了,从联通矩阵中删除;如果没找到,则此联通矩阵不是DAG,不能进行拓扑排序
package com.Construction; import java.util.LinkedList; import java.util.Queue; import java.util.Stack; public class GraphSimpleExample { private final int MAX_VERTS = 20; private GraphNodeBean nodeList[]; private int adjMat[][]; private int nVerts; public GraphSimpleExample(){ nodeList = new GraphNodeBean[MAX_VERTS]; adjMat = new int[MAX_VERTS][MAX_VERTS]; nVerts = 0; for (int i = 0; i < MAX_VERTS; i++) { for (int j = 0; j < MAX_VERTS; j++) { adjMat[i][j] = 0; } } } public void addNode(char label){ nodeList[nVerts++] = new GraphNodeBean(label); } public void addEdge(int start,int end){ adjMat[start][end] = 1; adjMat[end][start] = 1; } public void displayGraphNode(int v){ System.out.println(nodeList[v].label); } /** * 获得未访问节点 * @param v * @return */ public int getAdjUnvisitedVertex(int v){ for (int i = 0; i < nVerts; i++) { if(adjMat[v][i]==1 && nodeList[i].isVisited == false) return i; } return -1; } /** * deft first */ public void dfs(){ @SuppressWarnings("rawtypes") Stack<Integer> theStack = new Stack<Integer>(); nodeList[0].isVisited = true; displayGraphNode(0); theStack.push(0); while(!theStack.isEmpty()){ int v = getAdjUnvisitedVertex(theStack.peek()); if(v == -1) theStack.pop(); else{ nodeList[v].isVisited = true; displayGraphNode(v); theStack.push(v); } } // for (int i = 0; i < nVerts; i++) { // nodeList[i].isVisited = false; // } } public void bds(){ Queue<Integer> theQueue = new LinkedList<Integer>(); nodeList[0].isVisited = true; displayGraphNode(0); theQueue.offer(0); int v2; while(!theQueue.isEmpty()){ int v1 = theQueue.poll(); while((v2 = getAdjUnvisitedVertex(v1)) != -1){ nodeList[v2].isVisited = true; displayGraphNode(v2); theQueue.add(v2); } } // for (int i = 0; i < nVerts; i++) { // nodeList[i].isVisited = false; // } } /** * topologically output all the node 简单的拓扑排序 * 找到无后续节点,并输出,直到没有节点位置。 * 可以输出所有有顺序的关系,但是正确的输出不是唯一滴 * note: the graph only be DAG - including 不连通树, can't has cycles 环合树 */ public void topo(){ int orig_nVerts = nVerts; GraphNodeBean[] sortedArray = new GraphNodeBean[nVerts]; while(nVerts > 0){ int currentVertex = noSuccessor(); if(currentVertex == -1){ System.out.println("Error : Graph has cycles"); return; } sortedArray[nVerts - 1] = nodeList[currentVertex]; deleteVertex(currentVertex); } System.out.println("TOPOlogically sorted order:"); for (int i = 0; i < orig_nVerts; i++) { System.out.println(sortedArray[i].label); } } /** * within topology graph add a edge * @param start * @param end */ public void addTopoEdge(int start,int end){ adjMat[start][end] = 1; } /** * 找到没有后继的节点 * @return */ public int noSuccessor(){ boolean isEdge; for (int i = 0; i < nVerts; i++) { isEdge = false; for (int j = 0; j < nVerts; j++) { if(adjMat[i][j] > 0){ isEdge = true; break; } } if(!isEdge) return i; } return -1; } /** * delete certain node on the graph * @param delVert */ public void deleteVertex(int delVert){ if(delVert != nVerts - 1){ movingVertexData(delVert); for (int i = delVert; i < nVerts; i++) this.moveRowUp(i, nVerts); for (int i = delVert; i < nVerts; i++) this.moveColLeft(i, nVerts-1); } nVerts --; } /** * delete data from graph * @param index the number of data start with 0 */ public void movingVertexData(int index){ for (int i = index; i < nVerts -1; i++) { nodeList[i] = nodeList[i+1]; } } /** * row move up * @param row moving row number that start with 0 * @param length table column length */ public void moveRowUp(int row,int length){ for (int i = 0; i < length; i++) { adjMat[row][i] = adjMat[row+1][i]; } } /** * col move left * @param col moving column number that start with 0 * @param length table row lenglth; */ public void moveColLeft(int col,int length){ for (int i = 0; i < length; i++) { adjMat[i][col] = adjMat[i][col+1]; } } }
发表评论
-
java内存使用查看 转
2015-10-29 14:51 869转:http://mxsfengg.iteye.com ... -
Java线上应用故障排查之二:高内存占用
2015-08-17 16:28 0搞Java开发的,经常会碰到下面两种异常: 1、java. ... -
java filechannel
2015-08-14 15:42 1053Java NIO中的FileChannel是一个连接到文件 ... -
Java线上应用故障排查之一:高CPU占用
2015-08-06 13:58 6185转http://blog.csdn.net/blade20 ... -
java注释
2015-04-10 15:49 0Java注解是附加在代码中的一些元信息,用于一些工具在编译、 ... -
转jvm
2015-03-24 14:13 1673一、回顾JVM内存分配 ... -
java 域名转换
2014-12-22 11:05 768import java.net.InetAddres ... -
freemaker教程
2014-10-13 11:56 1982新换了工作,与想象差距也太大了 最近沦落到做报表了,我就 ... -
protocal buffers入门实例
2014-09-22 21:08 1654hadoop yarn中新的系列化protocol buf ... -
正则小计
2014-09-18 20:47 0&site=(.*?)&可以匹配site的值 ... -
在HBase中应用MemStore-Local Allocation Buffers解决Full GC问题
2014-06-13 23:05 1606译者注:上个月 ... -
java ipc 实例
2014-05-21 22:59 4880java ipc实例,仿照hadoop ipc写的实例 1 ... -
java worker thread模式
2014-03-25 22:46 1978转两个帖子 一个java wo ... -
bloom filter
2014-03-09 19:41 1954看到hadoop join和hbase都有bloo ... -
java reference
2014-03-09 17:49 716转 http://www.iteye.com/to ... -
annotation实例
2014-02-11 22:04 1140加载指定目录的所有class,通过注释区分实体类 p ... -
java获取子类 转
2014-02-11 16:58 3122获取子类 package com.tools; ... -
图论 五 最短路径 最长路径
2013-09-27 21:13 7438花几个算法的简易图: 一、 dijk ... -
动态代理
2013-08-14 20:38 1082动态代理,转:http://langyu.iteye. ... -
BTree B+Tree
2013-05-04 18:31 1965参考博文 http://blog.csdn.net/v_J ...
相关推荐
在标题中提到的"Java版查找并打印有向图中的所有环路径",这个问题涉及到图论中的一个经典问题——寻找环路。在实际应用中,如线程死锁识别,有向图的环路检测具有重要价值,因为线程间的资源依赖关系可以被抽象为有...
拓扑排序是图论中的一个重要概念,主要用于有向无环图(DAG,Directed Acyclic Graph)。在计算机科学中,特别是在数据结构和算法领域,拓扑排序常常用于解决任务调度、依赖关系分析等问题。Java语言提供了强大的...
在计算机科学中,拓扑排序是对有向无环图(DAG,Directed Acyclic Graph)进行排序的一种方法,它将图中的所有节点排列成一个线性的序列,且满足这样的条件:如果有从节点u到节点v的有向边,那么在排序结果中u必须...
拓扑排序是处理有向无环图(DAG,Directed Acyclic Graph)的一种基本方法,它对于理解和解决许多实际问题有着广泛的应用,如任务调度、依赖分析等。在Java开发中,理解并能熟练应用拓扑排序可以显著提高代码效率和...
拓扑排序是图论中的一个重要概念,特别是在有向无环图(DAG,Directed Acyclic Graph)中。在计算机科学中,它常被用于解决依赖关系的排序问题,例如任务调度、编译器的语句生成等。在这个“拓扑排序应用系统java....
总结来说,拓扑排序是解决有向图中寻找特定属性节点(如安全节点)的有效工具。通过广度优先搜索,我们可以确保在有限步骤内遍历所有可达节点,并按照特定规则(如升序)生成排序结果。在实际编程中,使用Java或其他...
总之,深度优先搜索是图论中的基础算法之一,通过DFS寻找有向图中的环是解决图问题的一个典型应用。在Java编程中,我们可以利用邻接表和栈来实现这个功能。通过分析`TestCycle.java`文件,我们可以深入理解这一过程...
在有环的有向图上执行拓扑排序是不定义的,因此程序应检测到环并给出适当的错误提示。 6. **可视化**:为了让用户直观看到拓扑排序的过程,可以使用动画效果,动态展示节点的移动和排序顺序。这需要在GUI中集成动画...
数据结构中的拓扑排序是一种对有向无环图(DAG)进行线性排序的方法,使得如果图中存在边, v>,则u在排序结果中一定在v之前。这个概念在解决依赖关系的问题中非常有用,例如任务调度或课程安排等。拓扑排序的目标是...
拓扑排序是对有向无环图(DAG)的线性排序,使得对于每条有向边 (u, v),节点u总是在节点v之前。Java实现中,可以使用队列配合深度优先搜索来完成拓扑排序,或者使用栈配合反向深度优先搜索。 这些算法的Java实现...
拓扑排序是图论中的一个重要概念,特别是在有向无环图(DAG,Directed Acyclic Graph)中。在这个课程设计报告中,我们将深入探讨拓扑排序的原理、应用及其实现过程。 一、程序分析 1)输入需求:拓扑排序算法通常...
拓扑排序是图论中的一个概念,主要用于有向无环图(DAG,Directed Acyclic Graph)。在课表安排场景中,每个课程可以视为图中的一个节点,如果课程A必须在课程B之前完成,那么就有一条从A到B的有向边。拓扑排序就是...
拓扑排序是图论中的一个重要概念,特别是在有向无环图(DAG,Directed Acyclic Graph)中。在这个数据结构的资源中,你将能够动态地观察和理解拓扑排序的过程。拓扑排序是对有向无环图的顶点的一种线性排序,使得...
2. **拓扑排序**:由于是无环图,我们可以对其进行拓扑排序,得到一个节点的线性顺序,使得对于每一条有向边 `(u, v)`,节点 `u` 在节点 `v` 之前。 3. **计算节点的最早开始时间和最晚开始时间**:遍历拓扑排序后...
1. **图的基本概念**:图由顶点(Vertex)和边(Edge)组成,可以是无向图或有向图,边可以有权重(Weighted)或无权重。图的数据结构通常用邻接矩阵或邻接表来表示。 2. **遍历算法**:深度优先搜索(DFS)和广度...
6. **拓扑排序**:对于有向无环图(DAG),可以使用拓扑排序来排列顶点,使得对于每条有向边,其起点都在终点之前。 7. **最大流最小割问题**:Ford-Fulkerson算法或Edmonds-Karp算法用于解决网络流问题,找到网络...
1. **图类**:API的核心是一个代表图的类,可能名为`Graph`或`UndirectedGraph`(无向图)和`DirectedGraph`(有向图)。此类通常包含顶点和边的集合,以及添加、删除和查询这些元素的方法。 2. **顶点类**:API会...
图的类型包括有向图、无向图、加权图和树等,每种都有其特定的应用场景。 1. **图的表示**:在Java中,我们可以用邻接矩阵或邻接表来表示图。邻接矩阵是一个二维数组,其中的元素表示顶点之间的连接;邻接表则更...