




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章 图 自测卷解答 姓名 班级 一、单选题(每题1分,共16分) 前两大题全部来自于全国自考参考书!( C )1. 在一个图中,所有顶点的度数之和等于图的边数的 倍。 A1/2 B. 1 C. 2 D. 4 ( B )2. 在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的 倍。 A1/2 B. 1 C. 2 D. 4 ( B )3. 有8个结点的无向图最多有 条边。 A14 B. 28 C. 56 D. 112 ( C )4. 有8个结点的无向连通图最少有 条边。 A5 B. 6 C. 7 D. 8 ( C )5. 有8个结点的有向完全图有 条边。 A14 B. 28 C. 56 D. 112 ( B )6. 用邻接表表示图进行广度优先遍历时,通常是采用 来实现算法的。A栈 B. 队列 C. 树 D. 图 ( A )7. 用邻接表表示图进行深度优先遍历时,通常是采用 来实现算法的。A栈 B. 队列 C. 树 D. 图 A0 2 4 3 1 5 6B. 0 1 3 6 5 4 2C. 0 4 2 3 1 6 5D. 0 3 6 1 5 4 2建议:0 1 3 4 2 5 6( C )8. 已知图的邻接矩阵,根据算法思想,则从顶点0出发按深度优先遍历的结点序列是( D )9. 已知图的邻接矩阵同上题8,根据算法,则从顶点0出发,按深度优先遍历的结点序列是A 0 2 4 3 1 5 6 B. 0 1 3 5 6 4 2 C. 0 4 2 3 1 6 5 D. 0 1 3 4 2 5 6( B )10. 已知图的邻接矩阵同上题8,根据算法,则从顶点0出发,按广度优先遍历的结点序列是A 0 2 4 3 6 5 1 B. 0 1 3 6 4 2 5 C. 0 4 2 3 1 5 6 D. 0 1 3 4 2 5 6(建议:0 1 2 3 4 5 6)( C )11. 已知图的邻接矩阵同上题8,根据算法,则从顶点0出发,按广度优先遍历的结点序列是A 0 2 4 3 1 6 5 B. 0 1 3 5 6 4 2 C. 0 1 2 3 4 6 5 D. 0 1 2 3 4 5 6( D )12. 已知图的邻接表如下所示,根据算法,则从顶点0出发按深度优先遍历的结点序列是A0 1 3 2 B. 0 2 3 1 C. 0 3 2 1 D. 0 1 2 3( A )13. 已知图的邻接表如下所示,根据算法,则从顶点0出发按广度优先遍历的结点序列是A0 3 2 1 B. 0 1 2 3 C. 0 1 3 2 D. 0 3 1 2( A )14. 深度优先遍历类似于二叉树的A先序遍历 B. 中序遍历 C. 后序遍历 D. 层次遍历( D )15. 广度优先遍历类似于二叉树的A先序遍历 B. 中序遍历 C. 后序遍历 D. 层次遍历( A )16. 任何一个无向连通图的最小生成树A只有一棵 B. 一棵或多棵 C. 一定有多棵 D. 可能不存在(注,生成树不唯一,但最小生成树唯一,即边权之和或树权最小的情况唯一)二、填空题(每空1分,共20分)1. 图有 邻接矩阵 、 邻接表 等存储结构,遍历图有 深度优先遍历 、 广度优先遍历 等方法。2. 有向图G用邻接表矩阵存储,其第i行的所有元素之和等于顶点i的 出度 。3. 如果n个顶点的图是一个环,则它有 n 棵生成树。 (以任意一顶点为起点,得到n-1条边)4. n个顶点e条边的图,若采用邻接矩阵存储,则空间复杂度为 O(n2) 。5. n个顶点e条边的图,若采用邻接表存储,则空间复杂度为 O(n+e) 。6. 设有一稀疏图G,则G采用 邻接表 存储较省空间。7. 设有一稠密图G,则G采用 邻接矩阵 存储较省空间。8. 图的逆邻接表存储结构只适用于 有向 图。9. 已知一个图的邻接矩阵表示,删除所有从第i个顶点出发的方法是 将邻接矩阵的第i行全部置0 。10. 图的深度优先遍历序列 不是 惟一的。11. n个顶点e条边的图采用邻接矩阵存储,深度优先遍历算法的时间复杂度为 O(n2) ;若采用邻接表存储时,该算法的时间复杂度为 O(n+e) 。12. n个顶点e条边的图采用邻接矩阵存储,广度优先遍历算法的时间复杂度为 O(n2) ;若采用邻接表存储,该算法的时间复杂度为 O(n+e) 。13. 图的BFS生成树的树高比DFS生成树的树高 小或相等 。14. 用普里姆(Prim)算法求具有n个顶点e条边的图的最小生成树的时间复杂度为 O(n2) ;用克鲁斯卡尔(Kruskal)算法的时间复杂度是 O(elog2e) 。15. 若要求一个稀疏图G的最小生成树,最好用 克鲁斯卡尔(Kruskal) 算法来求解。16. 若要求一个稠密图G的最小生成树,最好用 普里姆(Prim) 算法来求解。17. 用Dijkstra算法求某一顶点到其余各顶点间的最短路径是按路径长度 递增 的次序来得到最短路径的。18. 拓扑排序算法是通过重复选择具有 0 个前驱顶点的过程来完成的。三、简答题(每题6分,共24分)1. 【严题集7.1】已知如图所示的有向图,请给出该图的:顶点123456入度出度(1) 每个顶点的入/出度;(2) 邻接矩阵;(3) 邻接表;(4) 逆邻接表。 答案:2. 【严题集7.7】请对下图的无向带权图:(1) 写出它的邻接矩阵,并按普里姆算法求其最小生成树;(2) 写出它的邻接表,并按克鲁斯卡尔算法求其最小生成树。 解:设起点为a。可以直接由原始图画出最小生成树,而且最小生成树只有一种(类)!邻接矩阵为: 最小生成树 PRIM算法(横向变化): VbcdefghUV-UVexlowcosta4a3aaaaaab,c,d,e,f,g,hVexlowcosta40c5aaac5a,cb, d,e,f,g,hVexlowcost00c5b9aac5a,c,bd,e,f,g,hVexlowcost000d7d6d5d4a,c,b,d e,f,g,hVexlowcost000d7d6d50a,c,b,d ,h e,f,g Vexlowcost000d7g200a,c,b,d ,h ,g f,e Vexlowcost000f3000a,c,b,d ,h ,g, f e Vexlowcost0000000a,c,b,d ,h ,g, f, e 邻接表为:ab4c3ba4c5d5e9ca3b5d5h5db5c5e7f6g5h4eb9d7f3fd6e3g2gd5f2h6hc5d4g6克鲁斯卡尔算法步骤(按边归并,堆排序):先罗列:f-2-g a3-c f3e a4-b d4h (a,b,c) (e,f,g) (d,h) 取b5d, g5-d 就把三个连通分量连接起来了。3. 【严题集7.5】已知二维数组表示的图的邻接矩阵如下图所示。试分别画出自顶点1出发进行遍历所得的深度优先生成树和广度优先生成树。4. 【严题集7.11】试利用Dijkstra算法求图中从顶点a到其他各顶点间的最短路径,写出执行算法过程中各步的状态。解:最短路径为:(a,c,f,e,d,g,b)四、 【2001年计考研题】给定下列网G: (10分) 1 试着找出网G的最小生成树,画出其逻辑结构图;2 用两种不同的表示法画出网G的存储结构图;3 用C语言(或其他算法语言)定义其中一种表示法(存储结构)的数据类型。A BC EF GD解:1. 最小生成树可直接画出,如右图所示。2. 可用邻接矩阵和邻接表来描述:描述存储结构的数据类型可参见教材或电子教案:注:用两个数组分别存储顶点表和邻接矩阵#define INFINITY INT_MAX /最大值#define MAX_VERTEX_NUM 20 /假设的最大顶点数(可取为7)Typedef enum DG, DN, AG,AN GraphKind; /有向/无向图,有向/无向网Typedef struct ArcCell /弧(边)结点的定义 VRType adj; /顶点间关系,无权图取1或0;有权图取权值类型 InfoType *info; /该弧相关信息的指针ArcCell, AdjMatrix MAX_VERTEX_NUM MAX_VERTEX_NUM ;Typedef struct /图的定义VertexType vexs MAX_VERTEX_NUM ; /顶点表,用一维向量即可AdjMatrix arcs; /邻接矩阵Int Vernum, arcnum; /顶点总数(7),弧(边)总数(9)GraphKind kind; /图的种类标志Mgraph; 邻接表为:ab12e4ba12c20e8f9cb20d15g12dc15g10ea4b8f6fb9e6gc12d10五、算法设计题(每题10分,共30分)1. 【严题集7.14】编写算法,由依次输入的顶点数目、弧的数目、各顶点的信息和各条弧的信息建立有向图的邻接表。解:Status Build_AdjList(ALGraph &G) /输入有向图的顶点数,边数,顶点信息和边的信息建立邻接表 InitALGraph(G); scanf(%d,&v); if(v0) return ERROR; /顶点数不能为负 G.vexnum=v; scanf(%d,&a); if(a0) return ERROR; /边数不能为负 G.arcnum=a; for(m=0;mv;m+) G.verticesm.data=getchar(); /输入各顶点的符号 for(m=1;m=a;m+) t=getchar();h=getchar(); /t为弧尾,h为弧头 if(i=LocateVex(G,t)0) return ERROR; if(j=LocateVex(G,h)nextarc;q=q-nextarc); q-nextarc=p; p-adjvex=j;p-nextarc=NULL; /while return OK; /Build_AdjList 2. 【严题集7.15】试在邻接矩阵存储结构上实现图的基本操作:DeleteArc(G,v,w) ,即删除一条边的操作。(如果要删除所有从第i个顶点出发的边呢? 提示: 将邻接矩阵的第i行全部置0 )解:/本题中的图G均为有向无权图。 Status Delete_Arc(MGraph &G,char v,char w)/在邻接矩阵表示的图G上删除边(v,w) if(i=LocateVex(G,v)0) return ERROR; if(j=LocateVex(G,w)nextarc) k=p-adjvex; if(!visitedk&exist_path(k,j) return 1;/i下游的顶点到j有路径 /for /else /exist_path_DFS 解2:(以上算法似乎有问题:如果不存在路径,则原程序不能返回0。我的解决方式是在原程序的中引入一变量level来控制递归进行的层数。具体的方法我在程序中用红色标记出来了。)int visitedMAXSIZE; /指示顶点是否在当前路径上 int level1;/递归进行的层数int exist_path_DFS(ALGraph G,int i,int j)/深度优先判断有向图G中顶点i到顶点j 是否有路径,是则返回1,否则返回0 if(i=j) return 1; /i就是j else visitedi=1; for(p=G.verticesi.firstarc;p;p=p-nextarc,level-) level+; k=p-adjvex; if(!visitedk&exist_path(k,j) return 1;/i下游的顶点到j有路径 /for /else if (level=1) return 0;/exist_path_DFS 附加题:【严题集7.27】采用邻接表存储结构,编写一个判别无向图中任意给定的两个顶点之间是否存在一条长度为k的简单路径的算法。(注1:一条路径为简单路径指的是其顶点序列中不含有重现的顶点。注2:此题可参见严题集P207-208中有关按“路径”遍历的算法基本框架。)int visitedMAXSIZE; int exist_path_len(ALGraph G,int i,int j,int k)/判断邻接表方式存储的有向图G 的顶点i到j是否存在长度为k的简单路径 if(i=j&k=0) return 1; /找到了一条路径,且长度符合要求 else if(k0) visitedi=1; for(p=G.verticesi.firstarc;p;p=p-nextarc) l=p-adjvex; if(!visitedl) if(exist_path_len(G,l,j,k-1) return 1; /剩余路径长度减一 /for visitedi=0; /本题允许曾经被访问过的结点出现在另一条路径中 /else return 0; /没找到 /exist_path_len第8章 查找 自测卷答案 姓名 班级 A一、填空题(每空1分,共10分)1. 在数据的存放无规律而言的线性表中进行检索的最佳方法是 顺序查找(线性查找) 。2. 线性有序表(a1,a2,a3,a256)是从小到大排列的,对一个给定的值k,用二分法检索表中与k相等的元素,在查找不成功的情况下,最多需要检索 8 次。设有100个结点,用二分法查找时,最大比较次数是 7 。3. 假设在有序线性表a20上进行折半查找,则比较一次查找成功的结点数为1;比较两次查找成功的结点数为 2 ;比较四次查找成功的结点数为 8 ;平均查找长度为 3.7 。解:显然,平均查找长度O(log2n)5次(25)。但具体是多少次,则不应当按照公式来计算(即(21log221)/204.6次并不正确!)。因为这是在假设n2m-1的情况下推导出来的公式。应当用穷举法罗列:全部元素的查找次数为(122438455)74; ASL74/20=3.7 !4【计研题2000】折半查找有序表(4,6,12,20,28,38,50,70,88,100),若查找表中元素20,它将依次与表中元素 28,6,12,20 比较大小。5. 在各种查找方法中,平均查找长度与结点个数n无关的查找方法是 散列查找 。6. 散列法存储的基本思想是由 关键字的值 决定数据的存储地址。7. 有一个表长为m的散列表,初始状态为空,现将n(nhigh) return 0; /查找不到时返回0 mid=(low+high)/2; if(ST.elemmid.key= =key) return mid; else if(ST.elemmid.keykey) return Search_Bin_Recursive(ST, key, low, mid-1); else return Search_Bin_Recursive(ST, key, mid+1, high); /Search_Bin_Recursive 2. 【严题集9.31】试写一个判别给定二叉树是否为二叉排序树的算法,设此二叉树以二叉链表作存储结构。且树中结点的关键字均不同。解:注意仔细研究二叉排序树的定义。易犯的典型错误是按下述思路进行判别:“若一棵非空的二叉树其左、右子树均为二叉排序树,且左子树的根的值小于根结点的值,又根结点的值不大于右子树的根的值,则是二叉排序树”(刘注:即不能只判断左右孩子的情况,还要判断左右孩子与双亲甚至根结点的比值也要遵循(左小右大)原则)。若要采用递归算法,建议您采用如下的函数首部:bool BisortTree(BiTree T, BiTree&PRE),其中PRE为指向当前访问结点的前驱的指针。(或者直接存储前驱的数值,随时与当前根结点比较)一个漂亮的算法设计如下:int last=0, flag=1; / last是全局变量,用来记录前驱结点值,只要每个结点都比前驱大就行。int Is_BSTree(Bitree T) /判断二叉树T是否二叉排序树,是则返回1,否则返回0 if(T-lchild&flag) Is_BSTree(T-lchild); if(T-datadata; if(T-rchild&flag) Is_BSTree(T-rchild); return flag; /Is_BSTree 3. 【严题集9.22】已知一个含有1000个记录的表,关键字为中国人姓氏的拼音,请给出此表的一个哈希表设计方案,要求它在等概率情况下查找成功的平均查找长度不超过3。解:设计哈希表的步骤为:a) 根据所选择的处理冲突的方法求出装载因子a的上界;b) 由a值设计哈希表的长度m;c) 根据关键字的特性和表长m选定合适的哈希函数。刘注:要求ASL3,则m必然要尽量长,以减少冲突;4. 【严题集9.44】已知某哈希表的装载因子小于1,哈希函数H(key)为关键字(标识符)的第一个字母在字母表中的序号,处理冲突的方法为线性探测开放定址法。试编写一个按第一个字母的顺序输出哈希表中所有关键字的算法。解:注意此题给出的条件:装载因子a1, 则哈希表未填满。由此可写出下列形式简明的算法:void PrintWord(Hash Table ht)/按第一个字母的顺序输出哈希表ht中的标识符。哈希函数为表示符的第一个字母在字母表中的序号,处理冲突的方法是线性探测开放定址法。for(i=1; i=26; i+)j=i;While(ht.elemj.key)if(Hash(ht.elemj.key=i)printf(ht.elemj.key);j=(j+1)%m;/PrintWord第9章 排序 自测卷 答案 姓名 班级 一、填空题(每空1分,共24分)1. 大多数排序算法都有两个基本的操作: 比较(两个关键字的大小) 和 移动(记录或改变指向记录的指针) 。2. 在对一组记录(54,38,96,23,15,72,60,45,83)进行直接插入排序时,当把第7个记录60插入到有序表时,为寻找插入位置至少需比较 3 次。(可约定为,从后向前比较)3. 在插入和选择排序中,若初始数据基本正序,则选用 插入排序(到尾部) ;若初始数据基本反序,则选用 选择排序 。4. 在堆排序和快速排序中,若初始记录接近正序或反序,则选用 堆排序 ;若初始记录基本无序,则最好选用 快速排序 。5. 对于n个记录的集合进行冒泡排序,在最坏的情况下所需要的时间是 O(n2) 。若对其进行快速排序,在最坏的情况下所需要的时间是 O(n2) 。6. 对于n个记录的集合进行归并排序,所需要的平均时间是 O(nlog2n) ,所需要的附加空间是 O(n) 。7【计研题2000】对于n个记录的表进行2路归并排序,整个归并排序需进行 log2n 趟(遍),共计移动 n log2n 次记录。(即移动到新表中的总次数!共log2n趟,每趟都要移动n个元素)8.设要将序列(Q, H, C, Y, P, A, M, S, R, D, F, X)中的关键码按字母序的升序重新排列,则:冒泡排序一趟扫描的结果是 H, C, Q, P, A, M, S, R, D, F, X ,Y ;初始步长为4的希尔(shell)排序一趟的结果是 P, A, C, S, Q, D, F, X , R, H,M, Y ;二路归并排序一趟扫描的结果是 H, Q, C, Y,A, P, M, S, D, R, F, X ;快速排序一趟扫描的结果是 F, H, C, D, P, A, M, Q, R, S, Y,X ;堆排序初始建堆的结果是 A, D, C, R, F, Q, M, S, Y,P, H, X 。9. 在堆排序、快速排序和归并排序中,若只从存储空间考虑,则应首先选取 堆排序 方法,其次选取 快速排序 方法,最后选取 归并排序 方法;若只从排序结果的稳定性考虑,则应 选取归并排序方法;若只从平均情况下最快考虑,则应选取快速排序方法;若只从最坏情
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 一千根弦续写350字10篇范文
- 我的语文老师350字(12篇)
- 时尚的鸭子课件
- 小学生元宵节作文202514篇
- 纪检业务知识培训课件讲稿
- 早期报警实操培训知识课件
- 《新编商务应用文写作》第二章 习题参考答案
- 商业场地租赁合同解除协议
- 2025年无损检测资格证考试超声波无损检测工程师试卷
- 纪律处分条例课件教学
- GB/T 14202-1993铁矿石(烧结矿、球团矿)容积密度测定方法
- 生活中的会计课件
- 辽宁大学学生手册
- 酒水购销合同范本(3篇)
- 新时代中小学教师职业行为十项准则考核试题及答案
- 某工业区供水管道工程施工组织设计
- 学习罗阳青年队故事PPT在急难险重任务中携手拼搏奉献PPT课件(带内容)
- 模具保养记录表
- 皮内针讲课课件
- 新水浒q传乡试会试测验题目
- 地基承载力计算
评论
0/150
提交评论