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