数据结构-图
SoWhat1412
微信搜索【SoWhat1412】,第一时间阅读原创干货文章。人之患、在好为人师、不实知、谨慎言。点点滴滴、皆是学问、看到了、学到了、便是收获、便是进步。
展开
-
快速搞定并查集
高清思维导图已同步Git:https://github.com/SoWhat1412/xmindfile,关注公众号sowhat1412获取海量资源 并查集 并查集被很多人认为是最简洁而优雅的数据结构之一,主要用于解决一些元素分组的问题。比如最小生成图里的克鲁斯卡尔算法就用的此知识点。它管理一系列不相交的集合,并支持两种操作: 合并(Union):把两个不相交的集合合并为一个集合。 查询(Find):查询两个元素是否在同一个集合中。 当然,这样的定义未免太过学术化,看完后恐怕不太能理解它具体有什么用.原创 2020-10-24 10:03:21 · 589 阅读 · 2 评论 -
最小生成树MST-克鲁斯卡尔(Kruskal)算法
(Minimum Spanning Tree) http://blog.csdn.NET/dellaserss/article/details/7724401/ https://segmentfault.com/a/1190000004023326 http://blog.csdn.Net/w1085541827/article/details/52076481 先原创 2017-03-27 09:06:36 · 896 阅读 · 0 评论 -
最小生成树MST(Minimum Spanning Tree)-普里姆(Prim)算法
简单讲解 图的定义时 我们规定一个连通图的生成树是一个极小连通子图 含有N个顶点N-1个边 我们把图中带权的边 最小代价生成的树成为最小生成树。 普里姆(Prim)算法prim算法适合稠密图,其时间复杂度为O(n^2),其时间复杂度与边得数目无关以顶点找顶点 考虑权值 存储方式为邻接矩阵 基本思想:假设G=(V,E)是连通的,TE是G上最小生成树中...原创 2017-03-24 11:05:29 · 1474 阅读 · 0 评论 -
最短路径-迪杰斯特拉(Dijkstra)算法
Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。 最短路径?其实就是字面意思,一个带边值的图中从某一个顶点到另外一个顶点的最短路径。 官方定义:对于内网图而言,最短路径是指两顶点之间经过的边上权值之和最小的路径。 并且我们称路径上的第一个顶点为源点,最后一个顶点为终点。 由于非内原创 2017-03-27 09:09:00 · 905 阅读 · 0 评论 -
最短路径-弗洛伊德(Floyd)算法
http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html 弗洛伊德(Floyd)算法 是解决任意两点间的最短路径的一种算法 Floyd算法是一个经典的动态规划算法。用通俗的语言来描述的话,首先我们的目标是寻找从点i到点j的最短路径。从动态规划的角度看问题,我们需要为这个目标重新做一个诠释(这个诠释正是动态规原创 2017-03-27 09:12:39 · 854 阅读 · 0 评论 -
图的遍历-深度优先遍历
图的遍历跟树的遍历一样,从图中一点出发遍历图中其余顶点,且使每一个顶点仅被访问一次 叫 Traversing Graph depth first search DFS 深度优先遍历 深度优先搜索 具体算法表述如下: 访问初始结点v,并标记结点v为已访问。 查找结点v的第一个邻接结点w。 若w存在,则继续执行4,否则算法结束。 若w未被访问,对w进行深度优先原创 2017-03-21 18:17:59 · 785 阅读 · 0 评论 -
图存储1 临接矩阵
图由顶点跟边或者弧构成 顶点不分大小主次 用一维数组表示顶点, 边或弧 用二维数组存储,二维数组就是邻接矩阵 G(V,E) 如果有N个顶点 则临接矩阵为N*N 方阵 维持一个二维数组,arr[i][j]表示i到j的边,如果两顶点之间存在边,则为1,否则为0; 无向图为对称矩阵 维持一个一维数组,存储顶点信息,比如顶点的名字原创 2017-03-20 11:23:34 · 1303 阅读 · 1 评论 -
图存储2-邻接表
1. 邻接表(无向图)的特点: 有时候邻接矩阵并不是一个很好的选择: 如上图: 边数相对顶点较少,这种结构无疑是存在对存储空间的极大浪费。 邻接表: 数组和链表结合一起来存储。 1.)顶点用一个一位数组存储。 2.)每个顶点Vi的所有邻接点构成一个线性表,由于邻接点的个数不确定,所以我们选择单链表来存储。 2. 邻接表原创 2017-03-20 11:57:59 · 871 阅读 · 0 评论 -
AOE网-关键路径
AOV网中: 无环有向图中, 顶点表示活动 边表示先后顺序。 AOE网中:带权有向图中, 顶点表示事件,有向边表示活动,边上的权值表示活动的持续时间。 我们成为AOE网(Activity On Edge Network) AOE网中没有入边的顶点表示源点或始点,没有出边的叫终点或汇点。 AOE网要建立在活动之间制约关系没有矛盾的基础之上。 关原创 2017-03-27 19:27:21 · 2293 阅读 · 0 评论 -
图存储5-边集数组
5. 边集数组简介: 边集数组由两个一维数组构成: 1.) 一个存储顶点信息。 2.) 一个存储边的信息,这个边数组每个数据元素由一条边的起点下标(begin)、终点下标(end)、和权(weight)组成。 2. 边集数组适用场景: 边集数组关注的是边的集合,在边集数组中要查找一个顶点的度需要扫描整个边数组,效率并不高。 因此它更适合对原创 2017-03-21 15:14:03 · 1544 阅读 · 0 评论 -
图存储3-十字链表
1. 引言: 对于有向图来说,邻接表是有缺陷的: 邻接表:关心了出度问题,想了解入度就必须要遍历整个图才知道。 逆邻接表:解决了入度,却不了解出度的情况。 能否把邻接表和逆邻接表结合起来呢?答案就是:使用十字链表。 2.十字链表存储结构: 顶点表结点结构: firstin:表示入边表头指针,指向该顶点的入边表中第一个结点。//新加入原创 2017-03-21 10:02:32 · 818 阅读 · 1 评论 -
图存储4-邻接多重表
http://blog.csdn.net/doubleselect/article/details/40151877 1.引言: 如果我们在应用中关注的是顶点 ,那么邻接表是很好的选择 ,可是如果是重点关注边 那么 邻接表就麻烦了 若要删除左边的(V0,V2)这条边,需要对图下表的阴影两个结点进行删除操作。 2.邻接多重表的存储结构原创 2017-03-21 15:05:38 · 970 阅读 · 0 评论 -
图
一、基本术语 图:由有穷、非空点集和边集合组成,简写成G(V,E); Vertex:图中的顶点; 无向图:图中每条边都没有方向; 有向图:图中每条边都有方向; 无向边:边是没有方向的,写为(a,b) 有向边:边是有方向的,写为 有向边也成为弧;开始顶点称为弧尾,结束顶点称为弧头; 简单图:不存在原创 2017-03-21 17:13:33 · 701 阅读 · 0 评论 -
图的遍历- 广度优先遍历
广度优先遍历 breadth first search BFS 图的深度优先遍历类似与树的前序遍历, 广度优先遍历类似与树的 层序 遍历。 广度遍历-邻接矩阵 bool visited[MAX]; void BFSTraverse(MGraph G) { for(int i=0;i<G.numV; i++) { visited[i] = false; } Queue tem原创 2017-03-21 19:02:07 · 691 阅读 · 0 评论 -
AOV网-拓扑排序
http://www.cnblogs.com/xqzt/archive/2012/12/27/5637134.html#top AOV网络---拓扑排序 前面说了两个有环的应用 有环->最小生成树(普利姆算法,克鲁斯卡尔算法); 有环->最短路径(迪杰斯特拉算法,弗洛伊德算法); 现在我们说下没环的图 在一个有向图中,用顶点表示活动,用边表示顶点活动之间的优先关系,这样的网我们叫A原创 2017-03-27 13:35:00 · 2179 阅读 · 0 评论