有向无环图
一、什么是有向无环图(DGA)
首先我们需要知道怎样才算一个图,这里的图指的是离散数学中的图。在我们的认知中,两点可以确定一条直线,多条直线就能组成一张图。
当我们用集合来表示的时候,图就是由点的有穷非空集合以及线的集合所组成。在离散数学中,图是用于表示物体与物体之间关系的一种结构,
然后呢,将物体抽象为“顶点”或者“节点”,将物体间的关系抽象为边。这时我们用符号来表示这个集合G = (V,E),V代表顶点的集合,E就代表边的集合。
接下来就是正题,有向无环图。有向很好理解,就是两个顶点之间是有方向的,比如A指向B。那么什么是无环呢,假设从A到B有一条边,并且方向是从A指向B
然后B又指向另外一个顶点构成一张有向图(图中两个顶点之间都有方向)。简单理解就是,我从A出发,不管我怎么走我都不能回到A,这就是无环,那么反之
只要我有一条路能让我回到我出发的那个顶点就表示有环。
上图就是一个有向无环图,需要注意的是无环的定义,不能简单的认为顶点之间不能围成一个环,而是你从一个顶点出发不论怎么走都不能回到起点。
我们以上图的11当做起点,它能到达2,10,9,但是回不到11。
二、有向无环图的一些性质
1.在算法中有向无环图的最短路径或者最长路径通常使用拓扑排序,可以使时间复杂度变为线性的。将顶点拓扑排序后,从前到后遍历每一个顶点,
对于遍历到的顶点,更新其所有出边所到达顶点的长度值。这个时候我们求最短路就只需要选择短的边既可。
2.任何的有向树都能转化为有向无环图,但是反过来则不一定,因为有向无环图中从一个顶点到另外一个顶点有可能存在两条路。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?