赞
踩
1.1 术语
有向图是由一组顶点和一组有方向的边组成的,每条有方向的边都连接着有序的一对顶点。
有向图中,一个顶点的出度为由该顶点指出的边的总数;一个顶点的入度为指向该顶点的边的总数。
有向图中,有向路径由一系列顶点组成,对于其中的每个顶点都存在一条有向边从它指向序列中的下一个顶点。有向环为一条至少含有一条边且起点和终点相同的有向路径。简单有向环是一条(除了起点和终点)不含重复顶点和边的环。路径或者环的长度即为其中包含的边数。
1.2 有向图的可达性
在有向图中,深度优先搜索标记由一个集合的顶点可达的所有顶点所需的时间与被标记的所有顶点的出度之和成正比。
多点可达性的一个重要实际应用是在典型的内存管理系统中,包括许多Java的实现。在有向图中,一个点表示一个对象,一条边则表示一个对象对另一个对象的引用。这个模型很好地表现了Java程序的内存使用状况。在程序执行的任何时候都有某些对象是可以被直接访问的,而不能通过这些对象访问到的所有对象都应该被回收以便释放内存。标记-清楚的垃圾回收策略会为每个对象保留一个位做垃圾收集之用。它会周期性地运行一个有向图可达性算法来标记所有可以被访问到的对象,然后清理所有对象,回收没有被标记的对象,以腾出内存为新的对象使用。
1.3 环和有向无环图
1.3.1 有向图中的环
寻找有向环的算法如下:
- public class DirectedCycle {
- private boolean[] marked;
- private int[] edgeTo;
- private Stack<Integer> cycle; // 有向环中的所有顶点
- private boolean[] onStack; // 递归调用栈上的所有顶点
-
- public Direc
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。