数据结构(五)——有向图

本文介绍了有向图的概念,包括顶点的出度和入度,有向路径和有向环。深度优先搜索在有向图可达性中的应用,以及如何寻找有向环。此外,讨论了有向无环图的拓扑排序和强连通性,包括强连通分量的Kosaraju算法及其效率。
摘要由CSDN通过智能技术生成

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
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值