1、第七章 图分析第七章 图7.1 解:(1) ID(1)=3 OD(1)=0 ID(2)=2 OD(2)=2 ID(3)=1 OD(3)=2 ID(4)=1 OD(4)=3 ID(5)=2 OD(5)=1 ID(6)=2 OD(6)=3 (2) 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 1 0 0 1 0 1 1 1 0 0 0 0 0 1 1 0 0 1 0(3) (4) (5) 有三个连通分量1、5、23467.7请对下面的无向带权图,(1)写出它的邻接矩阵,并按普里姆算法求其最小生成树; (2)写出它的邻接表,并按克鲁期卡尔算法求其最小生成树。解:(1)图的邻接矩
2、阵为7.9试列出题7.9图中全部可能的拓扑有序序列,并指出应用7.5.1节中算法Topological Sort求得的是哪一个序列(注意:应先确定其存储结构)。 Status TopologicalSort(ALGraph G)FindIndegree(G,indegree);/对各顶点求入度InitStack(S);For(i=0;inextarc)k=p-adjvex; /对i号顶点的每个邻接点的入度减1if(!(-indegreek))Push(S,k); /入度减为0,则入栈 if(countnextarc)k=p-adjvex;if(!visitedk&exist_path(k,j)
3、 return 1;/i下游的顶点到j有路径/for/else/exist_path_DFS 7.23 同7.22题要求。试基于图的广度优先搜索策略写一算法。解:int exist_path_BFS(ALGraph G,int i,int j)/广度优先判断有向图G中顶点i到顶点j是否有路径,是则返回1,否则返回0int visitedMAXSIZE;InitQueue(Q);EnQueue(Q,i);while(!QueueEmpty(Q)DeQueue(Q,u);visitedu=1;for(p=G.verticesi.firstarc;p;p=p-nextarc)k=p-adjvex;i
4、f(k=j) return 1;if(!visitedk) EnQueue(Q,k);/for/whilereturn 0;/exist_path_BFS 第9章 查找9.2 试分别画出在线性表(a,b,c,d,e,f,g)中进行折半查找,以查关键字等于e,f和g的过程。解:1)查找e的过程如下: 2)查找f的过程3)查找g的过程9.3 画出对长度为10的有续表进行折半查找的判定树,并求其等概率时查找成功的平均查找长度。解: 9.9 已知如下所示长度为12的表(Jan,Feb,Mar,Apr,May,June,July,Aug,Sep,Oct,Nov,Dec)(1)试按表中元素的顺序依次插入一
5、查初始为空的二叉排序树,画出插入完成之后的二叉排序树,并求其在等概率的情况下查找成功的平均查找长度。(2)若对表中元素先进行排序构成有序表,求在等概率的情况下对此有序表进行折半查找时查找成功的平均查找长度。(3)按表中元素顺序构造一棵平衡二叉排序树,并求其在等概率的情况下查找成功的平均查找长度。解:(1)求得的二叉排序树如下图所示: 在等概率情况下查找成功的平均查找长度为:ASL成功=(1+2*2+3*3+4*3+5*2+6*1)/12=42/12=3.5(2)分析:对表中元素进行排序后,其实就变成了对长度为12的有序表进行折半查找了,那么在等概率的情况下的平均查找长度只要根据折半查找的判定树
6、就很容易求出。所以可求出:ASL成功=(1+2*2+4*3+5*4)/12=37/12(3)平衡二叉树的构造过程平衡二叉树为9.21 在地址空间为016的散列区中,对以下关键字序列构造两哈希表:(Jan,Feb,Mar,Apr,May,June,July,Aug,Sep,Oct,Nov,Dec)(1)用线性探测开放定址法处理冲突;(2)用链地址法处理。并分别求这两个哈希表在等概率情况下查找成功和不成功时的平均查找长度。设哈希函数为H(x)=i/2取整,其中i为关键字中第一个字母在字母表中的序号。解:(1)因为:H(Jan)=5;H(Feb)=3;H(Mar)=6;H(Apr)=0;H(May)
7、=6; H1(May)=7;H(June)=5;H1(June)=6;H2(June)=7;H3(June)=8H(July)=5;H1(July)=6;H2(July)=7;H3(July)=8;H4(July)=9;H(Aug)=0; H1(Aug)=1H(Sep)=9; H1(Sep)=10H(Oct)=7; H1(Oct)=8;H2(Oct)=9; H3(Oct)=10; H4(Oct)=11;H(Nov)=7; H1(Nov)=8;H2(Nov)=9; H3(Nov)=10; H4(Nov)=11;H5(Nov)=12;H(Dec)=2 所以,用线性探测开放定址法处理冲突构造的哈希表
8、如下图所示:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16AprAugDecFeb JanMarMayJuneJulySepOctNovCi:1 2 1 1 1 1 2 4 5 2 5 6 并求得:ASL成功=(1*5+2*3+4+5*2+6)/12=31/12 ASL不成功=(5+4+3+2+1+9+8+7+6+5+4+3+2+1)/14=60/140 12345678910111213141516(2)用链地址法处理冲突构造的哈希表如下图所示:并求得:ASL成功=(1*7+2*4+3)/12=18/12ASL不成功=(1*3+2*3+3)/14=12/14
9、9.25 假设顺序表按关键字自大至小有序,试改写教科书9.1.1节中的顺序查找算法,将监视哨设在高下标端。然后画出描述此查找过程的判定树,分别求出等概率下查找成功和不成功的平均查找长度。解:(1)顺序表的存储结构描述: Typedef struct Keytype key; Elemtype; /记录类型;typedef struct Elemtype *elem; int length; SSTable; /顺序表类型;按要求所得算法如下: int Search(SSTable ST, Keytype key) ST.elemST.length.key=key; for (i=0; keyh
10、igh) return 0; /查找不到时返回0mid=(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 9.32 已知一棵二叉排序树上所有关键字中的最小值为-max,最大值为max,又-maxxlchild) MaxLT_MinGT(T-lchild,x); /本算法仍是借助中序遍历来实现if(lastdata=x) /找到了小于x的最大元素printf(a=%dn,last);if(lastdatax) /找到了大于x的最小元素printf(b=%dn,T-data);last=T-data;if(T-rchild) MaxLT_MinGT(T-rchild,x);/MaxLT_MinGT
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1