Skip to content

图论学习相关笔记,包含算法java实现。

Notifications You must be signed in to change notification settings

iScript/graph-algorithm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

15839c6 · Feb 18, 2020

History

14 Commits
Feb 18, 2020
Feb 18, 2020
Feb 18, 2020
Feb 8, 2020
Feb 18, 2020
Feb 9, 2020
Feb 10, 2020
Feb 12, 2020
Feb 13, 2020
Feb 13, 2020
Feb 15, 2020
Feb 16, 2020
Feb 18, 2020
Feb 18, 2020

Repository files navigation

图论学习笔记

基本概念

图是什么? 图是由若干给定的顶点及连接两点的边所构成的图形。

其他相关概念:

  • 度:指和该节点相关联的边的条数。
  • 环:从一个顶点经过其他顶点回到原点。
  • 桥:对于无向图,如果删除了一条边,整个图联通分量数量发生变化,则这条边称为桥。
  • 割点:如果删除了一个顶点(顶点邻边也删除),整个图联通分量数量发生变化,则这个点称为割点。
  • 联通分量:图中相互连接可以相互抵达的顶点集合。

图的分类

  • 无向图、有向图(顶点之间的边是否有方向,如地铁图是无向图、社交关注有向图)
  • 有权图、无权图(顶点之间的边是否有权重)
  • 稀疏图、稠密图(平均每个节点的度/每个节点度的最大值)

图的表示

  1. 邻接矩阵 代码实现
  2. 邻接表 代码实现

图的遍历

  1. 深度优先遍历 代码实现
  2. 广度优先遍历(在无权图中结果即是最短路径) 代码实现

哈密尔顿回路和欧拉回路

哈密尔顿回路:从一个点出发,沿着边行走,经过每个顶点恰好一次,之后再回到出发点。 通过深度优先遍历求解

欧拉回路:从一个点出发,沿着边行走,经过每个边恰好一次,之后再回到出发点。 欧拉回路性质:想让每条边都走一边,回到原点,则每个点必须都有进有出。每个点相邻的边数,必须是偶数。说明7桥问题无解。 通过Hierholzer算法求解欧拉回路

最小生成树

求出一个生成树,使边的权值和最小,又称最小权重生成树的简称。 实际应用:如电缆布线,让每个节点都通上点并且布线费用最低。

切分定理 :

图中的顶点分为两部分,就称为切分。 如果一个边的两个端点,属于切分不同的两边,这个边成为横切边。 横切边中的最短边,一定属于最小生成树。

反证法证明切分定理:

  1. 令三条横切边分别为 e、f、g,且 e 为权值最小的横切边,T 为图的最小生成树
  2. 假设 T 包含 f,而不包含 e,那么如果将 e 加入 T,那么e,f 就必然形成了环,不再是生成树(因为最小生成树就是n个顶点一共有n-1条边,多加一条必然有环)
  3. 显然,环中e 的权值小于 f,那么用 e 替换 f 就可以形成一个权值小于 T 的生成树,与 T 为最小生成树矛盾

Kruskal算法 每次选择一个最短边,如果这个边没有形成环,相当于对某一个切分,选择了最短横切边。 Kruskal算法找最小生成树

Prim算法 操作切分,首先从1:v-1开始,每次找当前切分的最短横切边,逐步扩展切分,直到没有切分。 Prim算法找最小生成树

最短路径算法

如从一个城市到另外一个城市经过哪些公路路径最短。

Dijkstra算法

每轮循环

  1. 找到当前没有访问的顶点的最短路节点
  2. 确认这个节点的最短路就是当前大小
  3. 根据这个节点的最短路大小,更新其他节点的路径长度。

Dijkstra算法实现

最短路径算法Dijkstra算法最通用,但是不能处理负权边。 另外还有 Bellman-Ford 算法 和 Floyed算法

有向图

有向图的环检测 很多应用中需要确保我们的有向图是无环的,如程序模块的引用/任务调度/学习计划等 深度优先遍历检测有向图环

一般有向图主要处理 有向无环图,也叫 DAG (Directed Acyclic Graph)。

拓扑排序 是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。满足

  1. 每个顶点出现且只出现一次。
  2. 若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。 代码实现

网络流

一个有向图,有一个源点(入度为0),一个汇点(出度为0),边上有非负权值,表示容量。 最大流问题:从原点到汇点的最大流量是多少。

Edmonds-Karp算法

About

图论学习相关笔记,包含算法java实现。

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages