数据结构随笔—图

来源:互联网 发布:c语言中竖线 编辑:程序博客网 时间:2024/05/22 01:38
图分为有向图和无向图。

图中的数据结构通常称为顶点。有n(n-1)/2条边的无向图称为完全图。有n(n-1)条边的有向图成为有向完全图。

图的边或者弧具有与它相关的树,这种与图的边或者弧相关的数叫做权。

顶点的度是和顶点相关联的边的数目。有向图顶点的度是入度和出度的和。

如果对于图中的任意两个顶点都是连通的,则称为连通图。

连通分量是指无向图中的极大连通子图。

有向图中任意两个顶点连通,则称为强连通图。

有向图中的极大强连通子图称为强连通分量。

一个连通图的生成树是一个极小连通子图。

一个有向图的生成森林由若干棵有向树组成。含有图中全部顶点,但只有足以构成若干棵不相交的有向树的弧。

图的存储结构:数组表示法、邻接表、十字链表、邻接多重表。

图的遍历:深度优先搜索:类似于树的先根遍历。

广度优先搜索:类似于树的层次遍历,可用队列实现。

最小生成树:性质:假设N=(V,{E})是一个连通网,U是顶点集V的一个非空子集,若(u,v)是一条具有最小权值的边,其中u∈U,v∈V-U,则必存在一颗包含边(u,v)的最小生成树。普里姆算法和克鲁斯卡尔算法是两个利用此性质构造最小生成树的算法。

普里姆算法:在所有的u∈U,v∈V-U的边(u,v)∈E中找一条代价最小的边(u0,v0)并入集合TE,同时v0并入U,直至U=V为止。时间复杂度O(n2)

克鲁斯卡尔算法:假设联通网N=(V,{E}),则令最小生成树的初始状态为只有n个顶点而无边的非连通图T=(V,{}),图中每个顶点自成一个连通分量,在E中选择代价最小的边,若该边依附的顶点落在T中两个不同的连通分量上,则将此边加入到T中,否则舍去此边而选择下一条代价最小的边,以此类推,直到所有顶点都在同一连通分量为止。时间复杂度O(nlogn)。

假若在删去点点v以及和v相关联的各边之后,将图的一个连通分量分割成两个或两个以上的连通分量,则称顶点v为改图的一个关节点。一个没有关节点的连通图称为重连通图。在重连通图上,任意一对顶点之间至少存在两条路径,则在删除某个顶点以及依附于该顶点的各边时也不破坏图的连通性。若在连通图上至少删去k个顶点才能破坏图的连通性,则成图的连通性为k。

关节点的特性:

(1)若生成树的跟有两棵或两棵以上的字数,则此根节点必为关节点。

(2)若生成树中某个非叶子顶点v,其某棵子树的根节点或者子树中的其他节点没有指向v的祖先的回边,则v为关节点。

有向无环图的应用:拓扑排序:有某个集合上的一个偏序得到该集合上的一个全序。

偏序:若集合X上的关系R是自反的,反对称的,和传递的则称R是集合X上的偏序关系。

全序:设R是集合上的偏序,如果对于每个x,y必有xRy或者yRx,则称R是集合X上的全序关系。

拓扑排序的方法:(1)、在有向图中选一个没有前驱的顶点且输出。

(2)从图中删除该顶点和所有以他为尾的弧。

重复以上两步,直至全部顶点均以输出。

AOE-网:带权的有向无环图,网中只有一个入度为零的点和一个出度为零的顶点。常用来估算工程的完成时间。v1到vi的最长路径叫做vi的最早开始时间。工程中路径最长的路径称为关键路径。最迟开始时间等于最早开始时间的活动叫做关键活动。

若网中有几条关键路径,那么,单是提高一条关键路径上的关键活动的速度还不能导致整个工程缩短工期,而必须提高同时在几条关键路径上的活动的速度。

关键路径求解算法:
1. 输入e条弧<j,k>,建立AOE-网的存储结构。
2. 拓扑排序,并求得ve[]。从源点V0出发,令ve[0]=0,按拓扑有序求其余各顶点的最早发生时间ve[i]。如果得到的拓扑有序序列中顶点个数小于网中顶点数n,则说明网中存在环,不能求关键路径,算法终止;否则执行步骤3。
3.    拓扑逆序,求得vl[]。从汇点Vn出发,令vl[n-1] = ve[n-1],按逆拓扑有序求其余各顶点的最迟发生时间vl[i]。
4. 求得关键路径。根据各顶点的ve和vl值,求每条弧s的最早开始时间e(s)和最迟开始时间l(s)。若某条弧满足条件e(s) = l(s),则为关键活动。

ve=max{ve+dut}      vl=min{vl-dut}

最短路径

1、从某个源点到其余各顶点的最短路径。

先找v0顶点为弧尾的最短路径,并把v0和弧头节点加入集合S,寻找S集合中顶点的为弧尾的最短路径,直到所有顶点都加入集合S。时间复杂度o(n2)

2、每一对顶点之间的最短路径。

弗洛伊德算法。时间复杂度o(n3)

0 0
原创粉丝点击