图论算法基础

转载 2015年11月17日 21:42:01

【0】README

0.1)本文总结于 数据结构与算法分析, 旨在复习数据结构中图论算法的基础知识;


【1】图论若干相关定义

1.1)图G定义:一个图G=(V,E)由顶点及集V 和 边集E组成, 每一条边就是一个点对(v, w);
1.2)边邻接:当且仅当(v,w)∈E, 在无向图中, w和v邻接,且v也和w邻接;(还有第3中成分:边的权值)
1.3)路径: 一条路径是一个顶点序列 w1, w2,…,wn, 使得(wi,wi+1)∈E,这样一条路径长是该路径上的边数;
1.4)简单路径:其上的所有顶点都是互异的,但第一个顶点和最后一个顶点可能相同;
1.5)连通图(对于无向图而言): 如果在一个无向图中从每一个顶点到每个其他顶点都存在一条路径,则称该无向图是连通的;
1.6)强连通图(对于有向图而言):具有无向图连通性质的有向图称为是强连通的;
1.7)基础图:去掉有向图上的方向所形成的图;
1.8)弱连通图:如果有向图不是强连通的, 但基础图是连通的, 那么该图称为是弱连通的;
1.9)完全图: 是指每一对顶点间都存在一条边的图;


【2】图的表示

2.1)邻接矩阵:对于每条边(u, v), 我们设置 A[u][v]=1,否则数组的元素为0;如果边是有权的,设置A[u][v] 等于该权值 且用一个很大或者很小的权作为标记表示不存在的边;(∞)

  • 2.1.1)邻接表的空间需求是 Θ(|V|^2);如果图是稠密的:|E| = Θ(|V|^2) , 则邻接矩阵是合适的表示方法;如果在大部分应用中,图都是稀疏的;

2.2)邻接表(图的标准表示方法):如果图是稀疏的, 则使用邻接表来表示。对每一个顶点,我们使用一个表存放所有邻接的顶点。此时的空间需求为 O(|E| + |V|);

  • 2.2.1)引入散列表:在应用中,顶点都是名字而不是数字, 这些名字在编译时是未知的。由于我们不能够通过未知名字为一个数组做索引, 因此我们必须提供从名字到数字的映射。完成这项工作最容易的 方法是使用散列表, 在该散列表中我们对每个顶点存储一个名字以及一个范围在1到 |V| 之间的内部编号;
  • 2.2.2)邻接表的一个荔枝:

相关文章推荐

图论算法

图的定义 背景知识 看到这篇博客相信一开始映入读者眼帘的就是下面这幅图了,这就是传说中的七桥问题(哥尼斯堡桥问题)。在哥尼斯堡,普雷格尔河环绕着奈佛夫岛(图中的A岛)。这条河将陆地分成了下...

例题:最短网络 图论算法之最小生成树 prim//kruskal 学习笔记

图论算法之最小生成树  prim//kruskal         最小生成树简单的说就是在一个图里选取一些边,使这些边以及它们所连接的结点组成一棵树(两两结点之间可以到达),并且使选取的边的边权最小...

图论算法(7) --- 用并查集求最小生成树

求最小生成树,最经典的算法无非是prim算法和kruskal算法,而时间效率上,kruskal更胜一筹。对于kruskal的实现,这里我们采用并查集的思想。

图论算法及其模板

什么方法好,和数据关系很大,和你使用的数据结构也有关。比如使用vector,它自身就有复杂度,所以在稠密图上不及二维数组的邻接矩阵,但在稀疏图方面肯定vector的动态数组实现的链接列表更好。有些复杂...
  • ctsas
  • ctsas
  • 2017-03-01 22:04
  • 282

Mathematica处理图论算法的一些问答

http://mathematica.stackexchange.com/questions/15346/combinatorica-package-and-graph-theoretical-iss...

图论算法 有图有代码 万字总结 向前辈致敬

来自:NoMasp柯于旺 - CSDN博客 链接:http://blog.csdn.net/nomasp/article/details/45827145 图的定义 ...

图论算法 有图有代码 万字总结 向前辈致敬

图的定义背景知识看到这篇博客相信一开始映入读者演练的就是下面这幅图了,这就是传说中的七桥问题(哥尼斯堡桥问题)。在哥尼斯堡,普雷格尔河环绕着奈佛夫岛(图中的A岛)。这条河将陆地分成了下面4个区域,该处...
  • NoMasp
  • NoMasp
  • 2015-05-11 21:15
  • 2194

图论算法-搜索

BFS bool visited[MAX_VERTEX_NUM); //访问标记数组 void BFSTraverse(Graph G){ //对图...

<图论算法之2分匹配> hdu 1281(棋盘游戏)

题意: 给一个n*m的棋盘,在上面放上车,放的车之间不能相互攻击(在同一行或者同一列就能相互攻击),并且只有某些点能放车。 问最多能放多少车,其中有多少个格子必须放才能放最多的车。 这是一道很好的理...

图论算法

1.DFS和BFS算法 思考:DFS可以用栈来实现,BFS可以用队列来实现。比较简单,就直接上代码。#include #include #include #include #include...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)