扫码加入训练营

牢记核心词

学习得礼盒

计算机考研:数据结构常用算法精析(7)

2013-12-11 14:39:50来源:新东方在线编辑

  顶点结点

  有向无环图(DAG):是描述含有公共子式的表达式的有效工具。二叉树也能表示表达式,但是利用有向无环图可以实现对相同子式的共享,从而节省存储空间。

  顶点的度:

  无向图:某顶点V的度记为D(V),代表与V相关联的边的条数

  有向图:顶点V的度D(V)=ID(V)+OD(V)

  强连通分量:在有向图中,若图中任意两顶点间都存在路径,则称其是强连通图。图中极大 强连通子图称之为强连通分量

  “极大”在这里指的是:往一个连通分量中再加入顶点和边,就构不成原图中的一个 连通子图,即连通分量是一个最大集的连通子图。有向图的连通就是指该有向图是

  强连通的

  遍历图的过程实质上是_对每个顶点查找其邻接点的过程___ 其耗费的时间主要取决于采用的存储结构。当用邻接矩阵存储图时,查找每个顶点的邻接点所需的时间O( ),其中n是图中顶点数。而当用邻接表存储图时,找邻接点的所需时间为O(e),其中e为图中边的个数或有向弧的个数,由此,当以邻接表作为存储结构时,深度优先搜索遍历图的时间复杂度O(n+e).

  广度优先搜索遍历图的时间复杂度和深度优先搜索遍历相同,两者的不同之处仅在于对结点访问的顺序不同。也就是说他们的时间复杂度都取决于说采用的存储结构,当用邻接矩阵存储时,复杂度为O( ),当用邻接表存储时,时间复杂度为O(n+e).

  建图的算法:(邻接表是常考的,邻接矩阵简单,十字链表和 多重表和建邻接表十分的相似)

  void CreatGraph (AdjList &g) //建立有n个顶点和m 条边的无向图的邻接表存储结构

  { int n,m;

  scanf("%d%d",&n,&m);//输入顶点数和边数

  for (i =1,i<=n;i++)//输入顶点信息,建立顶点向量

  { scanf(&g[i].vertex);

  g[i].firstarc=null;

  }

  for (k=1;k<=m;k++)//输入边信息

  { scanf(&v1,&v2);//输入两个顶点

  i= LocateVertex (g,v1); j=GraphLocateVertex (g,v2); //顶点定位

  p=(ArcNode *)malloc(sizeof(ArcNode));//申请边结点

  p->adjvex=j;

  p->next=g[i].firstarc; g[i].firstarc=p;//将边结点链入出边链表的头部

  p=(ArcNode *)malloc(sizeof(ArcNode)); //因为是无向图所以要在另外一个

  p->adjvex=i;

  p->next=g[j].firstarc; g[j].frstarc=p;// 顶点的出边表中插入该结点

  }

  }//算法CreatGraph结束

考研公开课小程序

本文关键字: 计算机 考研 数据结构

考研英语核心词汇营

背词+听课+练习+督学,学习得礼盒

更多资料
更多>>
更多内容

关注新东方在线考研服务号

获得21考研真题及答案解析

1. 打开手机微信【扫一扫】,识别上方二维码;
2.点击【关注公众号】,获取资料大礼包。

近10年考研真题及答案免费下载
更多>>
更多公开课>>
更多>>
更多资料