7.18 图的相关知识

首先,那个师兄跟我们讲了讲图的一些基础,例如邻接矩阵可以用邻接表代替之类什么的(然而在没听过邻接表这个东西的时候就一般都这样储存了,原因是我们拥有智商)。

接下来统一记录我们以前不知道的一些知识:

无向图有向图:其实顾名思义,无向图就是没有方向,只要与其相连的边都可以互相到达。而有向图就是指只能按照一条边边的方向到达一条边。

阶:图中顶点的个数为阶。

完全图:每一条边都与其余的每条边相连(可得知总共有n*(n-1) div 2条边)。

顶点的度:入度——以该点为终点有多少条边可以到达这个点。出度——以该点为起点可以连向多少条边。

([定理1] 图G中所有顶点的度数之和等于边数的2倍。因为计算顶点的度数时,每条边均用到2次。    

    [定理2] 任意一个图一定有偶数个奇点。)

简单路径:当前一个路径序列中的顶点不重复出现。(路径中存在相同顶点的称之为回路,起点和终点相同的为简单回路)

在无向图中如果对于一个图中的任意两个顶点都可到达,则称之为连通图,否则称之为非连通图。而在有向或无向图中如果任意两个顶点可以互相到达,则称之为强连通图。

稠密图:边数>最大边数/2

稀疏图:边数<最大边数/2


上面都是一些最基础的东西,他还讲了一个算法:Prim算法和Kruskal算法。

分别讲述一下:

Prim算法:就是指当前以点k为起点,从这个点开始生成(任意一个点开始生成都可以,因为始终这个点会被连上)然后找一条当前已选过的点所连的权值最小的一个点,如果这个点还未被连过,则把这个点连上,以此类推,每次连点的时候记录一下就行了。

Kruskal算法:把当前每条边的权值按从小到大排序,然后从头开始判断这条边的两个顶点是否在一个集合里,如果不在的话就用并查集把两个集合并成一个集合,如果已经在一个集合里的话则不能连这个点,然后以此类推,每次连点的时候记录一下就行了。


分析一下两个算法的时间复杂度:

Prim算法因为至多有N个点,当图为完全图的时候,最坏时间复杂度明显是O(n*m),而kruskal的时间复杂度其实大概是由排序的算法决定的,最精确的应该是O(m*logm)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值