第6章学习小结

一  学习小结

图的基本知识

1. 图分为无向图和有向图。若无向图有 n(n-1)/2 条边,则称之为无向完全图,若有向图有 n(n-1) 条弧,则称之为有向完全图

2. 带权图通常称为网

3. :顶点v的度指和v相关联的边的数目,记为TD(v)   入度:以v为头的弧的数目   出度:以v为尾的弧的数目

4. 路径长度是一条路径上经过的边或弧的数目

5. 强连通图:在有向图G中,对于每一对vi,vj∈V,从vi到vj都存在路径

6. 连通生成树:一个极小连通子图,它含有图中全部顶点,但只有足以构成一棵树的n-1条边  其中各边代价之和(权)最小的那棵生成树成为最小生成树

图的存储

1. 邻接矩阵

#define MaxInt 32767  //表示极大值,即∞
#define MVNum 100    //最大顶点数
typedef char VerTexType;//假设顶点的数据类型为字符型
typedef int ArcType;        //假设边的权值类型为整型
typedef struct
{
    VerTexType Vexs[MVNum]; //顶点表
    ArcType arcs[MVNum] [MVNum]; //邻接矩阵
    int vexnum,arcnum;           //图的当前点数和边数
}AMGraph;

创建邻接矩阵的时间复杂度为O(n²)

2. 邻接表

#define MvNum 100       //最大顶点数
typedef struct ArcNode    //边结点
{
    int adjvex;            //该边所指向的顶点的位置
    struct ArcNode *nextarc;//指向下一条边的指针
}ArcNode;

typedef struct VNode    //顶点信息
{
    VertexType data;
    ArcNode *firstarc;  //指向第一条依附该顶点的边的指针
}VNode,AdjList[MvNum];  //AdjList表示邻接表类型

typedef struct
{
    AdjList Vertices;   //一维数组
    int vexnum,arcnum;  //图的当前顶点数和边数
}Graph;

创建邻接矩阵的时间复杂度为O(n+e)    (顶点数+边数)

图的遍历

1. DFS 深度优先搜索

 从某个顶点v出发,遍历v所在的连通分量

2. BFS   广度优先搜索

 最小生成树

1. Prim算法  普里姆算法    —— 加点法

时间复杂度 O(n²)   适用于稠密图

主要步骤:在所有 u∈ U, v∈V-U 的边(u,v)属于E中找一条权值最少的边(u0,v0),并入集合TE(N上最小生成树中边的集合),同时v0并入U

2. Kruskal算法 克鲁斯卡尔算法 ——加边法

时间复杂度 O(e log e) 适用于稀疏图

初始状态为只有n个顶点而无边的非连通图 T = { V , { } }  每个顶点自成一个连通分量

主要步骤:在E中选择权值最小的边,若该边依附的顶点落在不同连通分量上(即不形成回路),则将此边并入T,否舍去此边而选择下一条权值最小的边

最短路径:①路径上边的数目  ②路径上边的权值之和

1. Dijkstra算法  迪杰斯特拉算法

二  关于上次制定的目标和接下来的目标

这周没有合理安排时间大部分时间花在书面上,导致上机实践的时间大大缩水,很惭愧

下一周要先规划分配好时间,尽量保证足够的实操时间

原文地址:https://www.cnblogs.com/C-ch3-5/p/10887918.html

时间: 2024-10-07 23:34:13

第6章学习小结的相关文章

第三章学习小结—-转

[学习目标] 01掌握一维数组的声明和使用方法(OK) 02掌握二维数组的声明和使用方法(OK) 03掌握字符串的声明.赋值.比较和连接方法(连接很少用) 04熟悉字符的ASCII码和ctype.h中的字符函数 05正确认识++.+=等能修改变量的运算符(OK) 06学会用编译选项-Wall获得更多的警告信息(OK) 07了解不同操作系统中换行符的表示方法(嗯) 08掌握fgetc和getchar的使用方法(fgetc基本没用过) 09掌握预处理和迭代开发的技巧(嗯) 程序3-1 逆序输出 输入

数据结构 第一章学习小结

数据结构   第一章学习小结 1.数据结构第1章的心得体会: 这周学习了数据结构的绪论及第一章.初步了解了数据结构与算法的相关概念,一开始看书看视频时觉得还挺抽象的,不能够完全理解.但是反复多看了几遍之后,结合例题,自己去操作去跑代码,慢慢觉得容易理解接受起来了.由于现在以网课形式进行教学,老师上课的同时基本还是靠自己去理解学习.当然老师也发挥很大的作用,比如让我们更深入的了解递归的空间复杂度为什么与问题规模有关,又怎样去找到该函数的临界值等等.既锻炼了我们深入思考的能力,也让我们更加清楚了解不

数据结构第四章学习小结

第四章主要是串和数组的学习,之前对串和数组的应用仅限于对其单独处理,本章学习着重于对具体题目的实际操作,实践了串的模式匹配算法,对其有了更深入的了解,数组的应用拓展到了稀疏矩阵的存储的实现. 一.串 串的模式匹配 BF算法 首先未匹配到串尾时,将两个字符串一一匹配,可用C++自带的length()函数实现 while(i<=S.length()&&j<=T.length()) 接下来就是匹配的过程 if(S[i]==T[j]){ i++;j++; }//若匹配则继续比较下一位

第七章学习小结

第七章主要学习了很多种查找方式,从最简单的线性表查找到树表的查找到散列表查找,不同的查找方式有不同的优点,下面根据练习来实际应用这些知识. 这个问题的任务很简单:将一个不同的正整数序列插入哈希表,并输出输入数字的位置.散列函数定义为h(key)=key%tsize,其中tsize是散列表的最大大小.二次探测(只有正增量)用于解决碰撞.请注意,表的大小最好是素数.如果用户给定的最大大小不是质数,则必须将表大小重新定义为大于用户给定大小的最小质数.输入规格:每个输入文件包含一个测试用例.对于每种情况

数据结构第一章学习小结

第一章学习了一些基本概念以及它们之间的联系,对数据结构这门课程有了初步的了解.刚开始看书的时候,有很多地方不是很明白,对一些名词的解释也不懂,后来结合视频讲解才比较透彻.一开始不清楚ADT的作用,直到自己去写了一遍才有体会.当自己不懂或者不会的时候,一定要自己上手去写去打代码,才能明白困扰自己的那个点在哪里,通过查资料.看视频等等方式解决这个问题.数据结构和算法是相辅相成的,理解透彻基本的概念,才能为之后的学习铺路.这学期要肯花功夫,本来基础就不是很好,更应该笨鸟先飞.对概念的理解不透彻,或言之

DS第4章学习小结

你对本章内容的小结 完成作业或实践时解决困难的经验分享 这段时间,你参考了哪些值得向大家分享的资料?每一项推荐都请说明推荐理由及列出相关链接(或书目名称,具体页码) 目前学习过程中存在的困难,待解决或待改进的问题 上次博客确定的目标达到了吗?如果没达到,请分析原因 接下来的目标 一.你对本章内容的小结 第4章主要学习了串.数组 串主要学习了有关 模式匹配算法 的两种算法:T(n)=O(m*n)的BF算法 和 T(n)=O(m+n)的KMP算法, KMP算法难在求出 模式的next数组.(即求ne

第5章学习小结

第五章主要学习了树的知识,以前一直很好奇,为什么电脑能存储像树一样的数据结构,学完才发现,ADT加数组或者ADT加链表真的可以衍生出多种多样的数据类型,以下做出本章小结: 1.利用ASCII码实现不同类型的数据的转换,如:int = char - ‘0’. 2.学会了利用bool类型标记找出所需数据类型,如找根节点,先将bool型数组初始化成false,输入过的节点标记为true,那么为false的即为根节点. 3.树的四种遍历方式:利用递归实现三种遍历方式 先序: void PreOrderT

DS第七章学习小结

第七章小结 先列出一些基本的概念: ①关键字:数据元素(记录)中某个数据项的值,用它可以表示一个数据元素. ②动态查找表/静态查找表:若在查找的过程中进行修改操作(插入或删除),则相应的表为动态查找表,否则为静态查找表. ③平均查找长度:为确定记录在查找表中的位置,需和给定值进行比较的关键字个数的期望值称为查找算法在查找成功时的平均查找长度.公式如下:ASL=∑PiCi (i=1,2,3,…,n),可以简单以数学上的期望来这么理解.其中:Pi 为查找表中第i个数据元素的概率,Ci为找到第i个数据

第二章学习小结

数据结构第二章的学习结束了,了解了顺序表,单链表的建立,插入,删除,查找的算法,以及对它们时间复杂度,空间复杂度的分析.学会区分头指针,头结点和首元结点. 前插法,后插法创建单链表,相比之下,我觉得后插法比较好理解.双向链表就是那个表示被处理结点的前驱的后继(p->prior->next),结点的后继的前驱(p->next->prior)要区分开. 作业,说实话,一开始的时候,我真的很懵,书上的算法描述,我可以看的很明白,同时也感到很奇怪,甚至还一度认为那是可以敲上电脑进行编译运行